我使用Getopt::Long解析Perl中的命令行選項。對於長命令(例如,--input=file
),我不得不使用前綴-
(一個短劃線)作爲短命令(-s
)和--
(雙短劃線)。如何使用Perl的Getopt :: Long處理-r = <pattern>?
我的問題是,有一個特殊的選項(-r=<pattern>
),所以它是一個它的參數需要長期的選項,但它必須有一個破折號(-
)前綴不是雙破折號(--
)像其他長選項。是否可以設置Getopt::Long來接受這些?
我使用Getopt::Long解析Perl中的命令行選項。對於長命令(例如,--input=file
),我不得不使用前綴-
(一個短劃線)作爲短命令(-s
)和--
(雙短劃線)。如何使用Perl的Getopt :: Long處理-r = <pattern>?
我的問題是,有一個特殊的選項(-r=<pattern>
),所以它是一個它的參數需要長期的選項,但它必須有一個破折號(-
)前綴不是雙破折號(--
)像其他長選項。是否可以設置Getopt::Long來接受這些?
您是否正在設置「捆綁」?
如果是這樣,您可以禁用綁定(但是,然後,您將無法執行諸如使用myprog -abc
而不是myprog -a -b -c
)。
否則,現在唯一想到的就是使用Argument Callback(<>
)並手動解析該選項。
默認情況下,Getopt::Long可互換地接受單( - )或雙短劃線( - )。所以,你可以使用--r=foo
。當你嘗試時你有任何錯誤嗎?
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";
這些示例命令行產生相同的結果:
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
#!/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/
我缺少的東西?
我認爲他所描述的可能是由於捆綁銷售? – DVK 2010-03-16 15:41:19
@DVK情況可能如此。我沒有想到這一點。 – 2010-03-16 16:20:11
哎。它真的不能改變爲'-r arg'或'--r = arg'或者其他什麼?它不僅爲你工作,似乎讓用戶有一個打破常規習慣的選擇讓人感到困惑。 – Cascabel 2010-03-16 15:18:57
P.S.我不是在試圖避免給你一個答案 - 我知道你可能已經意識到我說的了。 (另外我不認爲Getopt :: Long中有答案) – Cascabel 2010-03-16 15:30:12
訣竅是讓參數看起來像人們對其他程序的期望。這是當你想要一個新的語法時,事情變得怪異,你必須做很多工作來解析它們。 – 2010-03-16 15:44:47