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__
####
$perl ml_a.pl 6
>> i=2
>> i=3
>> i=4
>> i=5
>> i=6
>> i=7
>> i=8
>> i=9
>> i=10
RESTORE 6
<< i=6
<< i=5
<< i=4
<< i=3
<< i=2
<< i=1
####
$perl ml_a.pl 3
>> i=1
>> i=2
>> i=3
>> i=4
>> i=5
>> i=6
>> i=7
>> i=8
>> i=9
>> i=10
RESTORE 3
<< i=3
<< i=2
<< i=1