2017-04-06 18 views
0

나는 Perl을 처음 접했고 Perl 스크립트 구문 분석 스크립트 인수에 문제가 있는지 파악하려고합니다.GetOptions를 사용하여 후행 문자열을 찾는 방법?

나는 다음과 같은 펄 스크립트라는 sample-perl.pl 있습니다

perl sample-perl.pl --from nyc lon 
Output will be: nyc 
:

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 
if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 

을 그리고 나는 (내가 두 번째 옵션를 입력하는 것을 잊었다 )과 같은 명령을 사용하는 경우

끝에 추가 문자열이있는 경우이를 감지하고 대신 오류가 표시되도록하려면 어떻게 적용 할 수 있습니까?

솔루션 :

이 적어도 내 경우 도움이 될 것입니다 추가 :

if(@ARGV){ 
    //throw error 
} 
+0

확인'스칼라 @의 ARGV'에서? '@ARGV> 0'의 경우 명령 줄에서 GetOptions()에 의해 선택되지 않은 (옵션이 아닌) 인수가 있습니다. –

+1

@ HåkonHægland 그것처럼 보입니다. 나는 그 대답을 받아 들일 수 있었으면 좋겠다. – abhishek

+0

'perldoc Pod :: Usage'도 참조 – toolic

답변

1

GetOptions를 호출 한 후, @ARGV 배열의 나머지 명령 행 옵션을 확인합니다. 모든 예기치 않은 인수가 오류를 생성한다고 가정합니다.

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "Error: unexpected args: @ARGV"; 

if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 
+1

고마워. 그것은 내 문제를 해결합니다. – abhishek

1

나는 대답이 너무 바뀌었고 이제는 몇 가지 추가 정보를 얻었습니다.

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
     'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "To many arguments after --from or --to : @ARGV "; 

if ($source_address) { 
say $source_address; 
} else { 
say "Error: No Source specified"; #Check to see if --from is actually specified, else print error. 
} 

if ($dest_address) { 
say $dest_address; 
} else { 
say "Error: No destination specified"; #Check to see if --to is actually specified, else print error. 
} 

너무 짧은

+0

'--from'을 사용하지 않으면 왜'Error'를 출력합니까? 그것은 옵션입니다. '--to'와 동일합니다. – toolic

+0

하지만 특별히 사용법은 "die"여야합니다. 사용법 : $ 0 - NAME --from NAME \ n ";"두 옵션이 모두 필요하다는 것을 알려줍니다. 예를 들어 거리를 계산하는 것과 같습니다. –

+0

당신의 대답은 정확하고 그런 것으로 표시되어 있습니다, 나는 방금 저에게 의미가있는 추가 물건을 추가했습니다 :) –