- see also
- Dumper 字符串花perl的数据结构
- Getopt::Long 解析复杂的命令行参数
# temp.pl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
print Dumper \@ARGV;
执行上面的代码,打印:
$ perl temp.pl -a=1 -b=2 -c
$VAR1 = [
'-a=1',
'-b=2',
'-c'
];
脚本名为“$0”与“FILE”类似
print "$0 \n";
print __FILE__ . "\n"
$ perl temp.pl -a=1 -b=2 -c
temp.pl
temp.pl
从@ARGV提取命令行参数
可以使用常规数组操作符来获取参数
my $name = $ARGV[0];
my $number = $ARGV[1];
my ($name, $number) = @ARGV;
my $name = shift @ARGV;
检查参数
my ($name) = @ARGV;
if(!defined($name)){
die "need name.\n";
}
# 简写
my $name = $ARGV[0] // die "need name. \n";
# or set defualt value
my ($name) = @ARGV;
$name = $name // 'default';
print "$name \n";
使用“Getopt::Long”解析参数
#!/usr/bin/perl
use strict;
use utf8;
use autodie;
use warnings;
use Encode qw(decode encode);
use Data::Dumper qw(Dumper);
use Getopt::Long qw(GetOptions);
my $name = "ajanuw";
my $age = 0;
GetOptions ("name=s" => \$name, # string
"age=i" => \$age) # string
or die("Error in command line arguments\n");
print "$name - $age \n";
执行上面的脚本:
$ perl temp.pl --name=Ajanuw --age=12
Ajanuw - 12
或则其它方式
--age 12
-age 12
-age=12
-a 12
无值参数
my $help;
GetOptions ("help" => \$help) or die("Error in command line arguments\n");
print "... \n" if(defined($help));
$ perl temp.pl --help
...
数组参数
my @arr;
GetOptions ("arr=s" => \@arr) or die("Error in command line arguments\n");
print Dumper @arr;
$ perl temp.pl -a=a -a=b
$VAR1 = 'a';
$VAR2 = 'b';
hash参数
my %hash;
GetOptions ("hash=s" => \%hash) or die("Error in command line arguments\n");
print %hash;
$ perl temp.pl --hash name=ajanuw --hash age=12
age12nameajanuw
GetOptions函数仅在相关时才处理以短划线开头的参数及其对应的值。处理完选项后,会将其从@ARGV中删除。(选项名称和选项值都将被删除。)命令行上的其他任何非关联值都将保留在@ARGV中。
use Data::Dumper qw(Dumper);
use Getopt::Long qw(GetOptions);
my $name;
GetOptions ("name=s" => \$name) or die("Error in command line arguments\n");
print "$name \n" if(defined($name));
print Dumper \@ARGV;
$ perl temp.pl -n Ajanuw a.txt b.txt
Ajanuw
$VAR1 = [
'a.txt',
'b.txt'
];
处理完选项后,将a.txt和b.txt保留在@ARGV中。现在,我们可以对它们执行任何操作,例如,可以使用foreach遍历@ARGV数组。