2010-03-16 3 views
2

Getopt::Long을 사용하여 Perl의 명령 행 옵션을 구문 분석하고 있습니다. 긴 명령의 경우 짧은 명령 (-s) 및 -- (이중 대시)에는 접두어 - (대시 하나)을 사용해야합니다 (예 : --input=file).Perl의 Getopt :: Long과 함께 -r = <pattern>을 어떻게 처리 할 수 ​​있습니까?

내 문제가 하나의 특별한 옵션 (-r=<pattern>)입니다 그래서 인수에 대한 요구 사항에 대한 긴 옵션입니다이지만, 하나의 대시 다른 긴 옵션 같은 (-) 접두사하지 이중 대시 (--)을 가지고있다. 이걸 받아들이도록 Getopt::Long을 설정할 수 있습니까?

+4

아야. 그것은 정말로'-r arg' 또는'--r = arg' 또는이 시점에서 어떤 것으로도 변경 될 수 없습니까? 그것은 당신을 위해 일하는 것뿐 아니라 일반적인 관행을 어기는 옵션을 사용자가 혼란스럽게하는 것처럼 보입니다. – Cascabel

+0

P. 나는 당신에게 대답하는 것을 피하려고 애 쓰지 않고 있습니다. 당신이 이미 내가 말한 것을 이미 알고 있다는 것을 압니다. (또한 Getopt :: Long 내에 응답이 없다고 생각합니다.) – Cascabel

+4

트릭은 사람들이 다른 프로그램에서 기대하는 것처럼 보이는 인수를 만드는 것입니다. 그것은 당신이 새로운 구문을 원할 때 사물이 이상하게되고 구문 분석을 위해 많은 작업을해야합니다. –

답변

3

"번들링"을 설정 하시겠습니까?

그렇다면 번들링을 사용 중지 할 수 있습니다 (단, myprog -a -b -c 대신 myprog -abc을 사용하는 등의 작업을 수행 할 수 없음).

그렇지 않으면 지금 당장 떠오르는 것은 Argument Callback (<>)을 사용하고 수동으로 해당 옵션을 구문 분석하는 것입니다.

6

기본적으로 Getopt::Long은 단일 (-) 또는 이중 대시 (-)를 서로 바꿔서 사용할 수 있습니다. 따라서 --r=foo 만 사용할 수 있습니다. 시도 할 때 오류가 있습니까?

my_program.pl --r=5 
my_program.pl --r 5 
my_program.pl -r=5 
my_program.pl -r 5 

input=2 
s=0 
r=5 
0
#!/usr/bin/perl 

use strict; use warnings; 

use Getopt::Long; 

my $pattern; 

GetOptions('r=s' => \$pattern); 

print $pattern, "\n"; 

출력 :

C:\Temp> zz -r=/test/ 
/test/ 
C:\Temp> zz -r /test/ 
/test/

나는 실종 뭔가

use strict; 
use warnings; 
use Getopt::Long; 
my $input = 2; 
my $s = 0; 
my $r = 3; 
GetOptions(
    'input=s' => \$input, 
    's'  => \$s, 
    'r=s'  => \$r, 
); 
print "input=$input\n"; 
print "s=$s\n"; 
print "r=$r\n"; 

이 샘플 명령 줄

은 동일한 결과를?

+3

번들링 중일 수 있다고 생각합니까? – DVK

+0

@DVK 그럴 가능성이 있습니다. 나는 그런 생각을하지 않았다. –

관련 문제