sub rs{ my @chars = map chr, 33..126; # all printable chars if (defined $p) { # don't use anything allready in our pattern @chars = grep index($p,$_)==-1, @chars; } my $r; $r .= $chars[rand @chars] for 1 .. shift; $r or ''; }