sub genIterator { my ($len,$count) = @_; my @list = (); return sub { if (@list == 0 || @list < $len) { push @list, 0; } else { $list[-1]++; while (@list && $list[-1] >= $count) { pop @list; $list[-1]++ if @list; } } return @list ? join("", @list) : undef; } } #### my $iter = genIterator(4,3); print while defined($_ = $iter->());