2013-03-22 5 views
0

서브 루틴하려고 다음 변수를 할당 I가 내가 뭘하려고하는 것은 $variableB을 설정 한 후 &this_subroutinegoto NOWGOHERE을하지만 난 단지 얻을 수있다펄 것은, Getopt :: 긴

my $use = "Use: " . basename($0) . " [options]"; 
my $version = "Version: 0.1 \n"; 
my $variableA; 
my $variableB; 

GetOptions(
'a=s'   => \$variableA, 
'help'   => sub { print $use; exit 0 }, 
'version'  => sub { print $version; exit 0 }, 
'b'    => sub { \$variableB, &this_subroutine; goto NOWGOHERE; }, 
); 

die "Incorrect use. \n" unless (defined $variableA || defined $variableB); 

sub this_subroutine { 

    print "$variableB\n"; 

} 

NOWGOHERE: print "HELLO I'M NOW HERE\n"; 

다음 코드 조각 이 둘을하려고 나는 $variableB 인쇄 할 수없는 것 경우 중 하나 'b=s' => \$variableB, 또는 sub { &this_subroutine; goto NOWGOHERE;0 },

를 사용하여, 모두 하나 또는 다른, 아니 할, 내가 누락되거나 잘못된 구문하고있는 중이 분명 뭔가가있다?

'b=s' => \$variableB, sub { &this_subroutine; goto NOWGOHERE; },을 사용하면 작동하지 않는 것 같습니까? 당신이 결코 할당하지 않기 때문에

당신의 도움이 많이 감사합니다, 많은 감사

답변

5

$variableB은 값을 가질하지 않습니다. 것은, Getopt :: 긴 스칼라 심판 주어 졌을 때, 그것은 그 스칼라에 옵션의 값을 할당하기 때문에

'a=s'   => \$variableA, 

$variableA에 값을 제공합니다. 한편

,

'b'    => sub { \$variableB, &this_subroutine; goto NOWGOHERE; }, 

는 것은, Getopt :: 긴 코드 참조, 그것은에 옵션 값을 할당 할 수 있습니다.

는 문서를 기반으로,

'b=s'    => sub { $variableB = $_[1]; this_subroutine(); goto NOWGOHERE; }, 

아마 당신이 원하는 일을해야하는 경우, 매개 변수로 코드 참조에 옵션 이름과 옵션 값을 전달 나타납니다.

+0

@DaveSherohman - 'b'=> sub {$ variableB = $ _ [0]; this_subroutine(); NOWGOHERE로 가십시오; },'$ variableB는'b'와 같고, 당신이 옵션 이름을 전달한 것처럼 보입니다. 그러나''b '=> sub {$ variableB = $ _ [1]; this_subroutine(); NOWGOHERE로 가십시오; },'$ variableB는 명령 행에서 제공 한 인수가 아니라'1'과 같습니다. –

+0

그 이유는'= s'이 여전히 필요했기 때문이라고 생각합니다. 편집을 참조하십시오. 도움을 많이 주셔서 감사합니다. –