找到多维数组大小

use*_*986 3 perl multidimensional-array

例如,在perl与[]中使用()有什么区别?当使用方括号时,如何找到数组的大小?

my @myarr = ( # parenthesis
                [ "itemone", "itemoneb", "itemonec" ],
                [ "itemtwo", "itemtwob", "itemtwoc" ]
               );

my @myarr = [ # square bracket
                [ "itemone", "itemoneb", "itemonec" ],
                [ "itemtwo", "itemtwob", "itemtwoc" ]
               ];
Run Code Online (Sandbox Code Playgroud)

编辑 感谢您的解释,我仍然试图理解这一点,这对我来说只是有点混乱.我仍然无法弄清楚如何在这里迭代我的数据

#!/usr/bin/perl -w

use strict;
use FindBin qw($Bin);
use Cwd;
use Data::Dumper;

my @mynames = (
                [ "myname", "mydescription", "mydata"],
                [ "myname2", "mydescription2", "mydata2"],
                [ "myname3", "mydescription3", "mydata3"],
               );


go();

sub go {
    start(\@mynames);
}

sub start {
    my @input_name = shift;

    # This works
    #print @input_name->[0][0][0];
    #die;

    # This Shows
    #print Dumper(@input_name);
    #$VAR1 = [
    #          [
    #            'myname',
    #            'mydescription',
    #            'mydata'
    #          ],
    #          [
    #            'myname2',
    #            'mydescription2',
    #            'mydata2'
    #          ],
    #          [
    #            'myname3',
    #            'mydescription3',
    #            'mydata3'
    #          ]
    #        ];

    # How do I iterate?
    #for my $i (0..@$input_name) {
    #    my $name = "";
    #    my $description = "";
    #    my $data = "";
    #    
    #}
}
Run Code Online (Sandbox Code Playgroud)

sla*_*fer 6

这是错的:

my @myarr = [ 
                [ "itemone", "itemoneb", "itemonec" ],
                [ "itemtwo", "itemtwob", "itemtwoc" ]
               ];
Run Code Online (Sandbox Code Playgroud)

它应该是:

my $myarr = [ 
                [ "itemone", "itemoneb", "itemonec" ],
                [ "itemtwo", "itemtwob", "itemtwoc" ]
               ];
Run Code Online (Sandbox Code Playgroud)

上面是"$ myarr".方括号将返回对一个sclalar列表的引用.因此需要使用"$"而不是"@"

要么

my @myarr = ( 
                [ "itemone", "itemoneb", "itemonec" ],
                [ "itemtwo", "itemtwob", "itemtwoc" ]
               );
Run Code Online (Sandbox Code Playgroud)

它是"()"而不是"[]"."()"将返回列表,因此需要"@".

编辑: 检查以下代码,迭代AoA.这样您就可以访问AoA的所有元素.以及个人元素:

#!/usr/bin/perl -w
use strict;

my @mynames = (
                [ "myname", "mydescription", "mydata"],
                [ "myname2", "mydescription2", "mydata2"],
                [ "myname3", "mydescription3", "mydata3"],
              );

### to access all the elements in above AoA
foreach my $a (@mynames)
{
    foreach my $b ( @{$a} )
    {
        print $b."\t";
    }
    print "\n";
}
print "====================================\n";

### To access individual elemnts:
print $mynames[1][2]."\n"; ### It prints mydata2
Run Code Online (Sandbox Code Playgroud)

您可能希望阅读perlref以了解和理解perl引用和嵌套数据结构.