Since it tends to crash a lot.
-sub recall {
- my $name = shift;
-
- my ($wrap, $err);
- {
- local $@;
- $wrap = eval { wrap $name };
- $err = $@;
- }
- croak _clean_msg $err if $err;
+sub recall;
+
+BEGIN {
+ my $safe_wrap = sub {
+ my $name = shift;
+
+ my ($wrap, $err);
+ {
+ local $@;
+ $wrap = eval { wrap $name };
+ $err = $@;
+ }
+
+ $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;
+ }
+ }