你有几个选择。
不要把这些都塞进一行:
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;
要使所有内容保持一行,请使用ivan nevostruev建议的子例程:
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 ];