使用 Getopt::Long
下了指令
perl cross.pl -file file.txt -number 1
會得到
file=file.txt
number=1
Getoptions 會把我給 -file 後面的值帶給 $file 變數
我可以
perl cross.pl -f file.txt -n 1
也可以
perl cross.pl -fi file.txt -num 1
只要符合 file 及 number 就行,不需要打全字
再來 file=s , s 是 string ,值要符合是字串的,而 number=i,意思是整數
參數跟值中間也可以用等於 =
perl cross.pl -file=file.txt -number=1
只要-file參數有下的話,$file 變數就會得到 1
“file” => $file,
而給一個 + 符號,當 -f -f 兩個時 ,$file 就會得到2
“file+” => $file,
也可以將值帶陣列
hash 也行
執行參數外,還要什麼等於什麼
perl cross.pl -f a=2 -f b=3
如果不要只用file這個名稱的話,用 | 符號作為名稱間的區隔
還有一種,我想不到它何時會被一定要使用到
Getopt::Long 還有 subroutine 的功能
use strict;
use Getopt::Long;
my ($file);
GetOptions (
“f” => $file,
‘v’ => sub {$file = 0},
);print “file=$file”;
我下了
perl cross.pl -f
$file 會的到 1
但如果
perl cross.pl -f -v
$file 會得到 0
如果
perl cross.pl -v -f
是會得到1,-v 跟 -f 巔倒就不同結果,
想想,我有需要用到它的地方嗎?
如果不用Getopt::Long ,我自已也有一套使用方式
# 指令選項組成 HASH
my %getopts = ();
if (@ARGV) {
my $hash_ref;
foreach (@ARGV) {
my ($key,$value) = split /=/, $_;
$hash_ref->{“$key”} = “$value” if ($key && $value);
}
%getopts = %$hash_ref if $hash_ref && $hash_ref =~ /HASH/;
}sub func_start {
print $getopts{file};
}sub func_usage {
print “
$0 –start file=where“;
}# 指令選項
if ($ARGV[0]) {
if ($ARGV[0] eq ‘–start’) {
func_start();
} elsif ($ARGV[0] eq ‘–help’) {
func_usage();
} else {
func_usage();
}
} else {
func_usage();
}print ”
“;
執行
perl cross.pl –start file=123.txt
得到 123.txt
perdoc Getopt::Long
ref: http://beakdoosan.blogspot.com/2009/05/perl-module-getoptlong.html
留言