我编写了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
为什么会这样?我该如何解决呢?
答案 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] }
构建一个哈希值,其中偶数索引成为键,奇数索引成为相应的值。