標籤:
當perl程式需要處理使用者輸入的參數時,有兩種方式:
第一種方法是:使用@ARGV數組
第二種方法是:調用Getopt::Long模組,該方法方便而強大。本文主要介紹該方法。
Getopt::Long 在Perl中的調用執行個體:
#!/usr/bin/perluse Getopt::Long;my ($verbose, $monitor, $debug, $test);
my @libs = ();
my %flags = ();
GetOptions (
‘verbose+‘ => \$verbose,
‘monitor!‘ => \$monitor,
‘debug:i‘ => \$debug,
‘test|t=s‘ => \$test,
‘lib=s‘ => \[email protected],
‘flag=s‘ => \%flags,
);
print "verbose=$verbose, monitor=$monitor, debug=$debug, test=$test, [email protected]\n";
while (my($k, $v)=each%flags) {
print "$k=>$v\n";
}
代碼解釋:
1. ‘verbose+’ :“+”表示不需要在該選項後跟參數,每使用一次該選項會verbose變數自動加1.
如:在命令列中出現 -verbose -verbose 2次,verbose的值變為2.
2. ‘monitor!’ : “!”表示該選項不需要後跟參數,直接使用即可(-monitor)。此時more的預設值為1.
常用於設定開啟和關閉一個功能,-monitor表示開啟,-nomonitor表示關閉。
3. ‘debug:i’ : “:”表示該選項後跟的參數可以是0或Null 字元
4. ‘test|t=s’ : "|" 表示該選項可以簡寫,如-test可以簡寫為-t
“=” 表示該選項必須跟參數
5. ‘lib=s’ => \@libs : 如果libs為陣列變數,該選項可以出現多次,期值被存入數組。
6. ‘flag=s’ : “=”表示該選項後跟字串(s),整數(i)或浮點數(f)等類型的參數。
7. ‘flag=s’ => \%flags: 如果flags為散列,該選項的參數要求一個索引值對(key=value),其值存放到散列中。
說明:參數匹配時,忽略大小寫;其選項可以使用簡寫形式(唯一最短字串,如首字母:-m表示 -more)
Getopt程式執行方法:
假設上述代碼儲存在test.pl檔案中,chmod +x test.pl。
$./test.pl --verbose --verbose -v --monitor --lib=‘/lib‘ -l ‘/lib64‘ --f a=1 --flag b=2 --debug 2 -t random
執行上述代碼,可以得到如下結果:
verbose=3, monitor=1, debug=2, test=random, libs=/lib /lib64a=>1b=>2
Getopt::Long模組傳遞參數:
1. 參數類型:s為字串,i為整數,f為浮點數
2. 變數類型:$為普通變數,@為數組,%為雜湊
[Perl] 利用Geopt::Long模組接收命令列參數