=head1 VERSION
-Version 0.09
+Version 0.10
=cut
use vars qw<$VERSION>;
-$VERSION = '0.09';
+$VERSION = '0.10';
=head1 SYNOPSIS
my $push = wrap { 'CORE::push' => '\@$' }; # only pushes 1 arg
-Others arguments are seen as key / value pairs that are meant to tune the code generated by L</wrap>.
+The remaining arguments C<%opts> are treated as key / value pairs that are meant to tune the code generated by L</wrap>.
Valid keys are :
=over 4
=cut
-sub recall {
- my $name = shift;
+sub recall;
- my ($wrap, $err);
- {
- local $@;
- $wrap = eval { wrap $name };
- $err = $@;
- }
- croak _clean_msg $err if $err;
+BEGIN {
+ my $safe_wrap = sub {
+ my $name = shift;
+
+ my ($wrap, $err);
+ {
+ local $@;
+ $wrap = eval { wrap $name };
+ $err = $@;
+ }
- goto $wrap;
+ $wrap, $err;
+ };
+
+ if ("$]" == 5.008) {
+ # goto tends to crash a lot on perl 5.8.0
+ *recall = sub {
+ my ($wrap, $err) = $safe_wrap->(shift);
+ croak _clean_msg $err if $err;
+ $wrap->(@_)
+ }
+ } else {
+ *recall = sub {
+ my ($wrap, $err) = $safe_wrap->(shift);
+ croak _clean_msg $err if $err;
+ goto $wrap;
+ }
+ }
}
=head1 EXPORT