我有以下代码使用对哈希的引用:
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;
}
我在做什么错了?
答案 0 :(得分:0)
假设您的foreach my $ses
循环位于readAll
子例程的内部 ,那么您要做的唯一事情就是使用括号( ... )
而不是括号{ {1}}在取消引用
{ ... }
用现代术语写成$$main{_SessSeq}
会好得多,但两者都具有相同的含义:哈希数组的引用以及每个哈希中数据库表行的数据
正确的循环如下所示
$main->{_SessSeq}
但是与仅仅写作相比并没有真正的优势
for my $ses ( @{ $main->{_SessSeq} } ) {
print STDERR Dumper $ses;
}
您没有说什么 这似乎不可行 可能是什么意思,但是print STDERR Dumper $main->{_SessSeq}
每次都会在表行周围输出表行的内容。循环
如果您需要任何进一步的帮助,则必须正确地描述问题,显示所获得的输出并仔细描述期望的结果