我不确定如何在Perl中处理命令行参数,并希望有人可以指出我的方向正确。
我的脚本将采用以下参数:
$perl my_script.pl server1_life=2 server1_ts=Ts server2_life=2 server2_ts=Age
脚本需要能够提取“生命”。和每个服务器的时间戳值。目前我将参数存储在一个数组中。
以这种格式提取参数的好方法是什么?
答案 0 :(得分:4)
嗯,总是可以手动解析参数。在这里,我们希望将每个参数拆分为=
,并可能将结果存储在散列中:
my %server_configs = map { split /=/, $_, 2 } @ARGV;
#=> (
# server1_life => 2,
# server1_ts => "Ts",
# server2_life => 2,
# server2_ts => "Age",
# )
但是,参数处理通常应该使用Getopt::Long
模块:
use Getopt::Long;
my %args;
GetOptions(\%args, 'life=i@', 'ts=s@');
# combine the config parts for each server
my @server_configs = map { [$args{ts}[$_], $args{life}[$_]] } 0 .. $#{ $args{ts} };
#=> ( [Ts => 2], [Age => 2] )
# or:
my %server_configs;
@server_configs{@{ $args{ts} }} = @{ $args{life} };
#=> (Ts => 2, Age => 2)
E.g。调用为script.pl --ts=Ts --life=2 --ts=Age --life=2