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)
这是错的:
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引用和嵌套数据结构.