【发布时间】:2019-01-31 23:12:38
【问题描述】:
我有以下使用哈希引用的代码:
sub readAll {
my ( $main, $dbh ) = @_;
my @SessSeq = ();
my $sql;
my $rec = 0;
$sql = "SELECT * FROM sys_table ";
my $sth = PrepAndExecuteQuery( $dbh, $sql );
while ( my $result = $sth->fetchrow_hashref() ){
push @SessSeq, $result;
$rec++;
}
$$main{_SessSeq} = \@SessSeq;
}
以上代码有效。我在主哈希中得到一个哈希数组 由于缺乏知识,我正在努力检索数据。 这似乎不起作用:
foreach my $ses ( @($$main{_SessSeq}) ){
print STDERR Dumper $ses;
}
我做错了什么?
【问题讨论】:
-
看起来您可能错误地取消引用哈希。试试
@{$$main{_SessSeq}}而不是@($$main{_SessSeq})。 -
这似乎不起作用是什么意思?
-
@{...}取消引用数组引用,而不是@(...) -
你是在潜艇还是在潜艇外倾倒?请记住,您填充了在 sub 中创建的
$main,但没有填充 sub 之外的任何类似命名的变量。如果您传入对数组的引用,则 sub 将添加到数组中。如果你传入undef,sub 不会修改调用者中的任何内容。 -
jja 的评论帮助了我,我现在得到了正确的会话。实际上我不想转储一些东西,当然我想访问散列数组中的散列。所以:通过我的 $hash = @{$$main{_SessSeq}}[1] ;我现在可以访问哈希。但是如果我尝试 @{$$main{_SessSeq}}[1]{name} 它会给出编译错误,因此无法识别。我怎样才能直接解决它?