从Perl中的命令行传递参数

时间:2017-11-03 07:35:03

标签: perl

我编写了Perl代码并试图传递命令行参数而不是获得预期的输出。

这是我的代码:

my ($buildno, $appname, $ver) = @ARGV;

print values \@ARGV;

$Artifact_name = "flora-$appname-$ver";

mkdir "$target_dir/$Artifact_name";'

当我运行Perl脚本perl scripts\perl\test.pl "MobileApp", %ver%时,我收到以下输出:flora-MobileApp-

显示日志消息

  

'在连接(。)或字符串中使用未初始化的值$ ver   Jscripts \ perl \ test.pl第31行(#3)'。

%ver%是环境变量,其值为1.0.1.23

我期待输出flora-MobileApp-1.0.1.23

1 个答案:

答案 0 :(得分:3)

所以你运行这样的程序:

perl scripts\perl\test.pl  "MobileApp",  %ver%

然后,在程序中,您正在访问命令行参数,如下所示:

my ($buildno, $appname, $ver) = @ARGV;

这里有明显的不匹配。你传递了两个论点,但期待三个。您最终会在$buildno中找到“MobileApp”,在%ver%中找到$appname的内容。您的上一个变量$ver将保持未定义。

如果要设置三个变量,则需要传递三个参数。

而且,如果您想对此进行调查,那么打印出三个变量的值肯定会很简单吗?

“修复”是将另一个值作为第一个命令行选项传递,以便参数与变量对齐。

perl scripts\perl\test.pl something_else "MobileApp"  %ver%

但我很高兴听到什么程度的混乱使这个问题难以调试。

更新:另一个选项(正如PerlDuck在评论中提醒我的那样)将修复代码只能指望两个参数。

my ($appname, $ver) = @ARGV;