我有以下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。但是,此语句会生成编译语法错误。
我必须做错事,但无法弄清楚它是什么。有人可以帮忙吗?
答案 0 :(得分:4)
语法错误来自$$#TransRef
,$#$TransRef
应为#
。错误地放错for ($Loop = 0; $Loop <= $$
{
$TransArrRef = $$TransRef[$Loop];
...
}
你意外地评论了剩余的一行:
$$
strict
下的 $#$TransRef
正常,因为它会为您提供进程ID,让编译器进一步失败。
此外,<=
为您提供了数组中的最后一个元素,因此您需要<
而不仅仅是for my $loop (0 .. $#$TransRef) {
$TransID = $TransRef->[$loop]->[0];
# ...
}
。或者使用这个Perl样式循环:
{{1}}
答案 1 :(得分:2)
my $arrays_ref = [ [1,2], [3,4] ];
for my $array_ref (@$arrays_ref) {
printf "%s\n", $array_ref->[0];
}
答案 2 :(得分:0)
您也可以使用foreach
:
my @array = ('val1', 'val2', 'val3') ;
my $array_ref = \@array ;
print "array size is $#{$array_ref} \n" ;
foreach $elem (@$array_ref) {
print "$elem \n"
}
输出:
array size is 2
val1
val2
val3