使用命令行中的参数运行perl脚本

时间:2015-06-01 14:04:59

标签: perl getopt-long

我编写了perl脚本,它从命令行获取参数并使用此参数打印简单行。这是代码:

#!/usr/bin/perl -w
use Getopt::Long;
use strict;

my $aviad;


GetOptions(
            "aviad:s"  => \$aviad,
           );

if($aviad){
    printf ("aaa: $aviad\n");
}
else{
        printf("error\n");
}

我不知道为什么,但是当我在命令行中输入脚本名称时:

./abc.pl aviad 4

我得到了error而不是aaa:4

为什么会这样?我该如何解决呢?

1 个答案:

答案 0 :(得分:-1)

从命令行中捕获键/值对而不使用getopt(因此不使用破折号)可以这样做:

use strict;
use warnings;

my %opts = map { $ARGV[$_] => $ARGV[$_ + 1] } (grep {$_ % 2 == 0} 0..$#ARGV);

if($opts{'aviad'}) {
    printf("aaa:$opts{'aviad'}\n");
} else {
    printf("error\n");
}

这将打印aaa:4以进行调用,如下所示:

perl myscript.pl aviad 4
perl myscript.pl bviad 23 aviad 4
perl myscript.pl cviad 12 aviad 4 bviad 23

简要说明:

grep {$_ % 2 == 0} 0..$#ARGV@ARGV中选择偶数索引。

map { $ARGV[$_] => $ARGV[$_ + 1] }构建一个哈希值,其中偶数索引成为键,奇数索引成为相应的值。