Sco*_*ter 2 perl for-loop reference
鉴于:
my @main_array = ();
my @sub_array1 = ( 1, 2, 3, 4, 5);
my @sub_array2 = ( "a", "b", "c", "d", "e" );
push @main_array, \@sub_array1;
push @main_array, \@sub_array2;
print "size of main_array is ",scalar(@main_array),"\n";
Run Code Online (Sandbox Code Playgroud)
我想通过main_array进行操作,然后通过它包含的两个数组进行操作,我不知道它的语法是什么.
不知道这是否正确,但Perl似乎想要在foreach变量的前面加一个$.(不喜欢@ $ sub_array)我也想知道循环通过main和sub的语法.
foreach my $sub_array (@main_array)
{
print $sub_array; # prints ARRAY(0x213232)
# loop through each item in sub array
#foreach ...
}
Run Code Online (Sandbox Code Playgroud)
编辑:所以总结下面给出的答案(感谢所有):
use strict;
use warnings;
my @main_array = ();
my @sub_array1 = ( 1, 2, 3, 4, 5);
my @sub_array2 = ( "a", "b", "c", "d", "e" );
push @main_array, \@sub_array1;
push @main_array, \@sub_array2;
print "size of main_array is ",scalar(@main_array),"\n";
print "--------foreach ---------------------\n";
foreach my $sub_array (@main_array)
{
print "Sub array has ", scalar(@{$sub_array})," elements\n";
foreach my $value ( @{$sub_array})
{
print "value: ",$value,"\n";
}
}
print "--------------- for ----------------------- \n";
for (my $i = 0; $i < scalar(@main_array); $i++)
{
my $sub_array = $main_array[$i];
print "Sub array has ", scalar( @{$sub_array}), " elements\n";
for (my $j = 0; $j < scalar( @{$sub_array}); $j++)
{
print "value: ", $sub_array->[$j],"\n";
}
}
Run Code Online (Sandbox Code Playgroud)
my $sz = 0;
for my $outer (@main_array) {
for my $inner( @{ $outer } ) {
print $inner;
$sz++;
}
}
print "total number of all values held in main_array is $sz \n";
Run Code Online (Sandbox Code Playgroud)
perllol和perldsc是这些问题的良好信息来源
对于调试use Data::Dumper; print Dumper(\@main_array)很有用
希望这可以帮助