2012-02-12 2 views
4

Perl에서 약간의 스크립트를 작성 중이며 명령 줄의 매개 변수에 문제가 있습니다. 나는 다음과 같은 스크립트를 실행Perl : GetOptions를 사용하여 잘못된 매개 변수 필터링

%params = (
    "help" => "", 
    "no_inline" => "", 
    "no_dupl" => "" 
); 

&paramError if (!GetOptions(
    "help" => \$params{"help"}, 
    "no-inline" => \$params{"no_inline"}, 
    "no-duplicates" => \$params{"no_dupl"}, 
)); 

:

> script.pl --no-inline # ok, valid parameter 
> script.pl --no-inline blahblah # blahblah is not valid 
> script.pl --no-i # not valid 

문제를 두 번째와 세 번째 예에서 GetOps이 매개 변수를 말한다 나는 아래의 코드와 같이 그들을 구문 분석 GetOps을 사용하고 있습니다 유효합니다. 이 매개 변수를 무효화하려면 어떻게해야합니까?

답변

6

세 번째 예가 유효합니다. GetOptions은 모호하지 않은 한 축약 된 이름을 허용합니다.
예를 들어 no-indent이라는 옵션이있는 경우 세 번째 예제는 모호하기 때문에 거부되었지만 --no-inl은 여전히 ​​허용됩니다.

이를 사용하지 않으려면 사용

use Getopt::Long qw(:config no_auto_abbrev); 

다른 옵션 Configuring Getopt::Long를 참조하십시오.

두 번째 예는 완전히 정상입니다. 호출 후 blahblah@ARGV에 남습니다. 스크립트가 지정한 옵션 만 허용하고 다른 인수 (파일 이름 등)를 사용할 수없는 경우 호출 후 @ARGV이 비어 있는지 확인하십시오.

+0

고마워, 그게 내가 필요한거야! – milano

관련 문제