我有以下Perl代码:

package CustomerCredit;
#!/usr/local/bin/perl
use 5.010;
use strict;

my $TransRef = @_; # This code comes from a sub within the package.
my ($Loop, $TransArrRef, $TransID);
for ($Loop = 0; $Loop < $$#TransRef; $Loop++)
{
   $TransArrRef = $$TransRef[$Loop]; # Gets a ref to an array.
   $TransID = $$TransArrRef[0];  # Try to get the first value in the array.
   # The above line generates a compile time syntax error.
   ...
}


$ TransRef是对数组的引用,对数组的引用。我正在尝试处理$ TransRef指向的数组中的每个元素。 $ TransArrRef应该获得对数组的引用。我想将该数组中的第一个值分配给$ TransID。但是,此语句会生成编译语法错误。

我一定在做错事,但无法弄清楚那是什么。有人可以帮忙吗?

最佳答案

语法错误来自$$#TransRef,应该为$#$TransRef。通过放错#,您不小心注释掉了该行的其余部分,从而导致:

for ($Loop = 0; $Loop <= $$
{
   $TransArrRef = $$TransRef[$Loop];
   ...
}


$$strict可以,因为它为您提供了进程ID,使编译器无法继续工作。

另外,$#$TransRef为您提供数组中的最后一个元素,因此您需要<=而不是仅<。或使用以下Perl样式循环:

for my $loop (0 .. $#$TransRef) {
    $TransID = $TransRef->[$loop]->[0];
    #   ...
}

10-05 18:53