use strict;
use warnings;
use Data::Dump qw/pp dd/;
for my $limit (reverse 1..5) {
for ( my $iter = countdown($limit); $iter->(my $a) ; ) {
print "$a: ";
}
print "\n";
}
sub countdown{
my $val = shift;
my $iter = sub {
if ($val--) {
$_[0]=$val;
return 1;
}
return; # stop iteration
};
return $iter;
}
####
4: 3: 2: 1: 0:
3: 2: 1: 0:
2: 1: 0:
1: 0:
0:
##
##
while ( countdown $limit => my $a ) {
....
}