use strict; use warnings; my $b_show_almost = 1; # Show string which "almost" match? map { find_string($_) } ('JUST', ' ANO', 'THER', ' PER', 'L HA', 'CKER'); sub find_string { my ($string) = @_; my $display = substr($string, 0, 3); # Indication of progress my $seed = 0; # Try all seed values my $result; # Result of rnd generation while (1) { $result = ""; srand $seed; map { $result .= sprintf "%s", chr(32 + int(rand 59))} (1..4); if ($result =~ /^$display/) { if ($result eq $string) { printf "Seed %08.8s => '$result' ** Success **\n", $seed; return; } if ($b_show_almost) { printf "Seed %08.8s => '$result'\n", $seed; } } ++$seed; } }