以下是代码
my $results = $session->array_of_hash_for_cursor("check_if_receipts_exist", 0, @params);
next if( scalar @{$results} <= 0 );
$logger->info("Retrieved number of records: ".scalar @$results);
foreach my $row( sort { $results->{$b}->{epoch_received_date} cmp $results->{$a}->{epoch_received_date} } keys %{$results} )
{
//logic
}
'check_if_receipts_exists'是一个返回一些结果的SQL查询。我尝试执行此操作,我收到以下错误, 将数组强制转换为哈希
时的错误索引我是Perl的新手。有人可以指出我正在犯的错误吗?
答案 0 :(得分:3)
$results
是哈希引用还是数组引用?
在某些地方,您使用它就像数组引用一样:
scalar @{$results}
在其他地方你正在使用它像哈希引用:
$results->{$b}->{...}
keys %{$results}
它不能同时存在(至少没有一些沉重的overload
魔法)。
如果我可以从设置$results
的函数的名称推断,它应该是对哈希引用列表的引用,那么一些调整将设置正确:
@{$results}
是正确的;这个表达式是“一个哈希引用数组”sort
的最后一个参数应该是一个列表,但要传递的正确列表是@{$results}
,而不是keys %{$results}
。$a
函数中的参数$b
和sort
将成为@{$results}
的成员,也就是说,它们将是哈希引用。所以要做的比较是
$a->{epoch_received_date} cmp $b->{epoch_retrieve_data}
$results->{$a}->{...} cmp $results->{$b}->{...}
所有在一起:
my $results = $session->array_of_hash_for_cursor(
"check_if_receipts_exist", 0, @params);
next if !@$results;
$logger->info("Retrieved number of records: ".@$results);
for my $row (
sort {
$b->{epoch_received_date}
cmp
$a->{epoch_received_date}
} @$results
) {
# logic
}