You could use dualvar and a hash...
use Scalar::Util qw(dualvar); my %Error=(220=>"Cannot connect to service"); sub mysub { if (@_) { return dualvar(0,1); } else { return dualvar(220,0); } } my $x; $x=mysub() or die $Error{$x};
Of course this still leaves the problem of where to put the error, in the return or in a global. I think your options range from using something like $Pack::Error (which is IMO infinitely preferable to using the magic global $_), using $@ or using something like ${^MYERROR}. For instance I think the following is a reasonable approach:
use Scalar::Util qw(dualvar); my %Error=(220=>"Cannot connect to service"); sub mysub { if (@_) { $@=dualvar(0,1); } else { $@=dualvar(220,0); } return $@ } mysub() or die sprintf "%d %s",$@,$Error{0+$@};
Assuming that you dont have any eval checking logic that this will interfere with (and im not seeing immediately how that could happen anyway) then it should be ok.
In reply to Re: Handling non-fatal method error strings without exceptions or globals?
by demerphq
in thread Handling non-fatal method error strings without exceptions or globals?
by legato
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |