我們在linux常常用到一個程式需要加入參數,現在瞭解一下perl中的有關控制參數的函數.getopt.在linux有的參數有二種形式.一種是–help,另一種是-h.也就是-和–的分別.–表示完整參數.-表示簡化參數.
在perl中也分這二種.
Getopt::Std模組的功能: 初始化perl命令列中所接受的參數,簡化了命令列參數的解析。
簡化參數例子:
12345678910 |
#!/usr/bin/perl -wuse strict;use Getopt::Std; use vars qw($opt_a $opt_b $opt_c);getopts('a:b:c:'); print "\$opt_a =>; $opt_a\n" if $opt_a;print "\$opt_b =>; $opt_b\n" if $opt_b;print "\$opt_c =>; $opt_c\n" if $opt_c; |
輸出如下:
[root@mail test]# ./getopt.pl -a aa -b bb -c cc
$opt_a =>; aa
$opt_b =>; bb $opt_c =>; cc
完整參數
12345678910111213141516171819202122232425 |
#!/usr/bin/perl use Getopt::Long; Getopt::Long::GetOptions( 'page=i' => \$page, 'onoff!' => \$onoff, 'help' => \$wants_help, 'name=s' => \$name, 'number:i' => \$number); } if(defined($page)){ print "page flag set to $page " }if(defined($onoff)){ print "onoff flag set to $onoff ";}if(defined($wants_help)){ print "help flag set to $wants_help ";}if(defined($name)){ print "name flag set to $name ";}if(defined($number)){ print "number flag set to $number ";} |
./getlong.pl -name AAA
name flag set to AAA
帶值參數
※參數類型:整數, 浮點數, 字串
GetOptions( ‘tag=s’ => \$tag );
‘=’表示此參數一定要有參數值, 若改用’:'代替表示參數不一定要有參數值
‘s’表示傳遞字串參數, 若為’i'表傳遞整數參數, 若為’f'表傳遞浮點數
example:
test.pl –tag=string
or
test.pl –tag string
多參數值的參數
GetOptions ("library=s" => \@libfiles);
參數傳到 @tag
or
GetOptions ("library=s@" => \$libfiles);
參數傳到 @$tag
example:
test.pl –library lib/stdlib –library lib/extlib
參數別名
GetOptions (‘length|height=f’ => \$length);
第一個名稱為primary name, 其他的名稱為alias(可有多個alias名稱)
當使用hash參數時, 使用primary name作為key值
參數的簡稱及大小寫
GetOptions (‘length|height=f’ => \$length, "head" => \$head);
若沒有特別設定, Getopt會忽略參數的大小寫, 也就是 -l or -L 指的都
是同一個參數(–length)
對於不傳遞參數的選項,也就是一些開關類型,可以在第一部分後接“!”,這表示該選項不接收自變數,但是可以 通過在前面加上no變成負的(例如,“more”選項的-nomore)。如果不是用“!”,而是“+”,這表示它會在每次出現的時候增加一個變數。如果 選項出現在命令列裡,那麼相關的變數被設定為1;如果負的選項出現了,那麼相關的變數就被設定為0。
hash參數值(有名稱及參數值)
GetOptions ("define=s" => \%defines);
or
GetOptions ("define=s%" => \$defines);
example:
test.pl –define os=linux –define vendor=redhat