What the heck...I just uploaded another new release of Var::Pairs
(version 0.004000), which lets you write this:
use Var::Pairs;
sub countdown {
my $n = shift;
return sub {
return if $n < 0; # Indicates iterator exhausted
return $n--; # Next value iterated
}
}
for my $limit (reverse 1..5) {
while (my ($a) = each_value countdown($limit)) {
print $a, ':';
}
say q{};
}
...which is very close to what you wanted, I believe.
(And, yes, the each_value() subroutine is doing a lot of very hard paddling
under the surface to correctly ignore all those repeated calls to countdown($limit)
in the while loop. ;-)
And, obviously, it would be far more efficient to write the iteration:
for my $limit (reverse 1..5) {
my $iter = countdown($limit);
while (my ($a) = each_value $iter) {
print $a, ':';
}
say q{};
}
Damian