Является ли $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
}