我编写了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
。
答案 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;