【发布时间】:2016-06-21 17:13:26
【问题描述】:
我是 Perl 新手,目前正在学习 Perl 如何处理多维数组以及如何访问元素。
在子程序中执行数据库查询,并返回数组@stash:
...
while ( $array_ref = $sth->fetchrow_arrayref ) {
push @sub_stash, [ @$array_ref ];
}
$dbh->disconnect;
return ( @sub_stash );
@stash 在 main 中接收,并管理打印数组的内容如下:
@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 列?
【问题讨论】:
-
使用Data::Dumper检查数据结构。
-
我不太明白你在问什么你 正在 访问所有元素——循环遍历顶级数组,并打印出以 refs 为元素的数组。与其简单地打印
@$array_ref,不如在它上面运行一个循环,你会看到究竟是什么。你已经在你展示的代码中得到了一切,我建议你多玩一点。一个很好的资源是perldsc,当然还有perlreftut和perlref。 -
除了上面的注释,你需要知道,做
print "@array"会将@array的所有元素都转换成字符串。就像join(' ', @array)(' '实际上是$"的内容,但现在这并不重要)。所以它不是一个字符串,你只是通过你输出它的方式把它变成一个。您还可以在query子中复制引用,因为my前面没有$array_ref = $sth->fetchrow_arrayref,它重用相同的变量,然后用[ @$array_ref ]取消引用并引用它。做my $res和push @sub_stash, $res。
标签: perl