use strict; use warnings; use Return::MultiLevel qw/with_return/; our %returns; sub rec { my ($i) = @_; $i++; print ">> i=$i\n"; if ($i <= 9) { with_return { $returns{$i} = shift; rec($i); }; } if (@ARGV) { my $r = shift @ARGV; print "RESTORE $r\n"; $returns{$r}->(); } print "<< i=$i\n"; } rec(0); __END__