sub next_iter { my($count, $die, $current) = @_; return '1' x $count unless $current; $current =~ s{ (?!$die) ((.) $die*) $ }{ my $d = $2 + 1; $d x length $2 }ex or return undef; return $current; } ... my $cur; print $cur while $cur = next_iter(3, 6, $cur);