2009-11-13 26 views
3

我讀過的文檔爲GetOptions,但我似乎無法找到我所需要的...(也許我是個盲人)如何使用GetOptions獲取默認參數?

我想要做的是分析這樣

myperlscript.pl -mode [sth] [inputfile] 
命令行

我可以使用-mode部分,但我不知道如何獲取[inputfile]。任何建議將被認真考慮。

回答

8

對於此任務,您不使用GetOptionsGetOptions將簡單地爲您解析選項,並將所有不在@ARGV中的選項留下。因此,撥打GetOptions之後,只需在@ARGV處查看在命令行上傳遞的任何文件名即可。

3

不以-開頭的命令行參數仍然在@ARGV,不是嗎?

6

任何不由GetOptions處理的東西都留在@ARGV。所以,你可能會想是

use Getopt::Long; 
my %opt 
my $inputfile = 'default'; 
GetOptions(\%opt, 'mode=s'); 
$inputfile = $ARGV[0] if defined $ARGV[0]; 
6

GetOptions會離開它沒有任何分析論證,在@ARGV變量。所以你可以循環使用@ARGV變量。

use Getopt::Long; 
my %opt; 
GetOptions(
    \%opt, 
    'mode=s' 
); 

for my $filename (@ARGV){ 
    parse($filename, \%opt); 
} 

還有另一種選擇,可以使用特殊的<>參數回調選項。

use Getopt::Long qw'permute'; 
our %opt; 
GetOptions(
    \%opt, 
    'mode=s', 
    '<>' => sub{ 
    my($filename) = @_; 
    parse($filename, \%opt); 
    } 
); 

,如果你希望能夠對多個文件的工作,但使用一些不同的選擇,這非常有用。

perl test.pl -mode s file1 file2 -mode t file3 

這個例子將設置$opt{mode}s,那麼它將調用parsefile1作爲參數。然後它將以file2作爲參數調用parse。然後它會將$opt{mode}更改爲t,並以file3作爲參數調用parse