我有一个包含1个或多个字符串的数组@jobs,但是当我运行以下代码时,我得到一个运行时错误"无法在/home/xa341d/bin/hourly.pl第32行修改非左值子程序调用"
elsif (@jobs > 0) {
my $my_jobs = "";
my $i;
for ($i = 0; i <= $#jobs; i++) {
my $temp = $jobs[$i];
$my_jobs += "-j $temp ";
}
print "my_jobs = $my_jobs\n";
open $alOut, "/home/zn035b/bin/autorep2.pl $my_jobs -l 0 | grep `date \"+%m/%d/%Y\"` | sort -k 3,3|" or die "Can't open: $!";
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这里会发生什么?
Perl程序员会将foreach循环写为:
foreach my $job (@jobs) {
$my_jobs .= "-j $job ";
}
Run Code Online (Sandbox Code Playgroud)
也许:
$my_jobs .= "-j $_ " foreach @jobs;
Run Code Online (Sandbox Code Playgroud)
在Perl中很少使用C风格的for循环.并且有充分的理由.foreach循环通常很容易理解.
你也可以用地图做:
my $jobs = join ' ', map { "-j $_" } @jobs;
Run Code Online (Sandbox Code Playgroud)
将其添加到脚本的顶部.
use warnings;
use strict;
Run Code Online (Sandbox Code Playgroud)
您将看到您正在使用i而不是$i在循环中,而+=不是.=应该用于连接.+=另一方面,在左侧添加右侧的数值(为0,因为"-j"不是数字).
也就是说,我没有从此代码中获取"非左值子"消息,因此您可能应该提供更多信息或者至少告诉我们什么line 32是.