use strict; my @chr = map chr, 33..126; my @stack; my $fresh; while (1) { if (not @stack) { $fresh++; } else { shift @{$stack[-1]}; if (not @{$stack[-1]}) { pop @stack; $fresh++; redo; } } push @stack, map [@chr], 1..$fresh; $fresh = 0; print map $_->[0], @stack; print "\n"; }