在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

07-27 13:16