Perl命令行参数

时间:2014-03-28 09:34:17

标签: perl

我不确定如何在Perl中处理命令行参数,并希望有人可以指出我的方向正确。

我的脚本将采用以下参数:

$perl my_script.pl server1_life=2 server1_ts=Ts server2_life=2 server2_ts=Age

脚本需要能够提取“生命”。和每个服务器的时间戳值。目前我将参数存储在一个数组中。

以这种格式提取参数的好方法是什么?

1 个答案:

答案 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