У вас есть несколько вариантов.
Не пытайтесь втиснуть все это в одну строку:
my $mails = [ reverse @{$mail_api->GetLogSendMail({ customer_id => $id })} ];
становится:
my $mails = $mail_api->GetLogSendMail({ customer_id => $id });
@$mails = reverse @$mails;
Если GetLogSendMail
достаточно глуп, чтобы возвращать ссылку на массив, с которым вам не следует связываться, вам придется немного изменить это, чтобы создать новый массив:
my $inviolate_mails = $mail_api->GetLogSendMail({ customer_id => $id });
my $mails; @$mails = reverse @$inviolate_mails;
Чтобы держать все в одной строке, используйте подпрограмму, как предлагает Иван Невоструев:
sub reverse_ref \@ {
return [ reverse @{$_[0]} ];
}
my $mails = reverse_ref $mail_api->GetLogSendMail({ customer_id => $id });
Если вам нужно загрузить списки операций для ссылок на массивы, рассмотрите возможность создания библиотеки:
package ArrayRef::Util;
# boiler plate skipped.
sub reverse_ref \@ {
return [ reverse @{$_[0]} ];
}
sub push_ref \@\@ {
push @{$_[0]}, @{$_[1]};
}
# and so on
Наконец, предложение Эвана Кэрролла autobox
тоже помогает:
use autobox;
my $mails = [ $mail_api->GetLogSendMail({ customer_id => $id })->reverse ];
См. Должен ли я использовать autobox в Perl? для получения дополнительной информации об autobox.