use strict; use warnings; use Return::MultiLevel qw/with_return/; sub rec { my ($i, $return) = (@_, undef); $i++; print "i=$i\n"; if ($i == 3) { with_return { my $newreturn = shift; rec($i, $newreturn); }; } if ($i == 5) { $return->() if $return; } if ($i == 7) { return; } rec($i, $return); } rec(0); __END__ $ perl ml.pl i=1 i=2 i=3 i=4 i=5 i=4 i=5 i=6 i=7