有几种方法:
解决方案1:如果您不需要返回一行,只需返回一个假标量:
sub sub_undef {
# xxx
return $error; # Already a true/false scalar
}
while (sub_undef()) { do_stuff(); }
解决方案2:返回一个arrayref而不是一个数组,如果出错则返回false(undef)
sub sub_undef {
# xxx
return $error ? undef : $rowArrayRef;
}
while (my $row = sub_undef()) { do_stuff(@$row); }
解决方案 3:返回一个元组 ($status, $rowArrayRef)
sub sub_undef {
# xxx
return ($error, $rowArrayRef);
}
while (my ($error, $row) = sub_undef()) { last if $error; do_stuff(@$row); }
解决方案 4:仅当行不能为空时才有效,除非根据您的业务案例发生错误!
sub sub_undef {
# xxx
return $error ? () : @row;
}
while (my @row = sub_undef()) { do_stuff(@row); }
解决方案 5:使用异常处理错误 ( Try::Tiny
)
# No example worth bothering that won't be covered by Synopsis of the module