在Perl中,我一直对如何从数组条目中干净地分配多个局部变量感到困惑。
我一直在subs中使用以下语法,因此我对此有些熟悉:
my ($var1, $var2) = @_
但是其他的变化使我感到困惑。例如,我有以下有效的代码:
for my $ctr (0 .. $#matchingLines) {
my $lineNo = $matchingLines[$ctr][0];
my $text = $matchingLines[$ctr][1];
其中“
@matchingLines
”是由两个元素组成的数组。我希望可以将最后两行转换为显而易见的内容:
my ($lineNo, $text) = $matchingLines[$ctr];
那当然是行不通的。我尝试了许多变体,但找不到任何有效的方法。
最佳答案
听起来您有一个数组数组。这意味着内部数组将是数组引用。如果要将它们分配给var,则需要推论它们。
use strict;
use warnings;
my @matchingLines = (['y','z'],['a','b']);
for my $ctr (0 .. $#matchingLines) {
my ($lineNo, $text) = @{$matchingLines[$ctr]};
print "#Array index: $ctr - lineno=$lineNo - text=$text\n"
}
这产生了输出
#Array index: 0 - lineno=y - text=z
#Array index: 1 - lineno=a - text=b