2D数组引用数组

Tom*_*ski 1 perl reference multidimensional-array

我试图了解引用如何在Perl中工作,并且我正在尝试使用此示例代码:

my @name = ("Jack S", "John L", "Cary S");
my @number = ("29", "78", "54");
my @bigNumber = ("40000", "50000", "60000");

my @array2D = (\@name, \@number, \@bigNumber);
Run Code Online (Sandbox Code Playgroud)

我试图从这个2d数组打印,所以它最终得到一个与数组中每一行类似的输出:

杰克S 29 40000

我似乎无法绕过引用部分.

fri*_*edo 6

帮助理解Perl中深层结构的好方法是使用Data :: Dumper.例如:

use strict;
use warnings;

use Data::Dumper;

my @name = ("Jack S", "John L", "Cary S");
my @number = ("29", "78", "54");
my @bigNumber = ("40000", "50000", "60000");

my @array2D = (\@name, \@number, \@bigNumber);

print Dumper \@array2D;
Run Code Online (Sandbox Code Playgroud)

这向我们展示了这个输出:

$VAR1 = [
          [
            'Jack S',
            'John L',
            'Cary S'
          ],
          [
            '29',
            '78',
            '54'
          ],
          [
            '40000',
            '50000',
            '60000'
          ]
        ];
Run Code Online (Sandbox Code Playgroud)

换句话说,我们传递Dumper了一个对包含三个项目的数组的引用,每个项目都是一个数组引用.

因此,如果我们想要遍历这些数组并在每个数组的第一个插槽中打印项目,我们可以这样做:

foreach my $ref( @array2D ) { 
    print $ref->[0], " ";
}
print "\n";
Run Code Online (Sandbox Code Playgroud)

这将输出:

Jack S 29 40000
Run Code Online (Sandbox Code Playgroud)

如果你想概括一下打印所有记录,你可以做这样的事情.(这假设所有嵌套数组的大小与第一个相同.)

my $count = @{ $array2D[0] };
foreach my $index( 0 .. $count - 1) { 
    foreach my $ref( @array2D ) { 
        print $ref->[$index], " ";
    }
    print "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

Jack S 29 40000
John L 78 50000
Cary S 54 60000
Run Code Online (Sandbox Code Playgroud)

虽然在这一点上,重新考虑你的结构可能会更好.例如,您可能想要按名称索引的数组哈希.