my( $i, $j, $k ); my $li = lazy { ${$_[0]}++ } 1; my $lj = lazy { ${$_[0]} > $i ? undef : ${$_[0]}++ } 1; my $lk = lazy { ${$_[0]} > $j ? undef : ${$_[0]}++ } 1; my $iterator = sub { lcomp { $i**2 == $j**2 + $k**2 ? [$k,$j,$i] : undef } \$i => $li, \$j => $lj, \$k => $lk; }; while ( defined( my $elem = $iterator->() ) ) { print Dumper( $elem ); eq "q\n" and exit; } # while