Perl:处理数组和数组引用

时间:2016-06-21 08:33:27

标签: perl

我是Perl新手,我目前正在学习Perl如何处理多维数组以及如何访问元素。

数据库查询在子例程中执行,并返回数组@stash:

...
while ( $array_ref = $sth->fetchrow_arrayref ) {
        push @sub_stash, [ @$array_ref ];
    }

$dbh->disconnect;
return ( @sub_stash );

在main中收到@stash,并设法按如下方式打印数组的内容:

@stash = query($var);

### Dump the stash contents!
foreach my $array_ref ( @stash ) {
    print "@$array_ref\n";
} 

屏幕输出的示例如下:

bash-3.2$ ./test_db_array.pl
2007 123 200728 200753 26
2008 256 200800 200852 53
2009 256 200900 200952 53
2010 258 201001 201052 52
2011 257 201101 201152 52
2012 256 201201 201253 53
2013 255 201300 201352 53
2014 254 201400 201452 53
2015 256 201500 201552 53
2016 116 201601 201624 24
bash-3.2$

@stash包含10行乘5列,还是包含10行1列(由一行文本组成)?我怎么能搞清楚这一点?

在开发我的小程序时,我希望遍历年份列(数组的第一列),并打印年份。

如何访问特定元素,例如第3行 - 第4列?

1 个答案:

答案 0 :(得分:6)

您的@stash数组包含十个数组引用。每个引用的数组将包含五个元素(查询中每个列中的一个)。

您可以使用Data::Dumper验证这一点。

print Dumper(\@stash);

您可以使用两组数组查找括号访问子数组的各个元素。

print $stash[0][0]; # prints 2007
print $stash[9][4]; # prints 24

或者您可以在循环中打印数组中的各个元素。

foreach my $array_ref ( @stash ) {
    print "$array_ref->[0]\n"; # prints the first element (i.e. the year)
} 

有关处理这些数据结构的更多详细信息,请参阅perllolperldsc