Есть на CPAN модули.
Я когда-то использовал приблизительно вот такую функцию.
random_password(7);
sub random_password {
my($length, $vowels, $consonants, $alt, $s, $newchar, $i);
($length) = @_;
if ($length eq "" or $length < 3) {
$length = 6; # make it at least 6 chars long.
}
$vowels = "AEUYaeiouy";
$consonants = "bdghDGHJLMNPQRSTVWXZ12345678jmnpqrstvwxzBDGHJLMNPQRSTVWXZ12345678";
srand(time() ^ ($$ + ($$ << 15)) );
$alt = int(rand(2)) - 1;
$s = "";
$newchar = "";
foreach $i (0..$length-1) {
if ($alt == 1) {
$newchar = substr($vowels,rand(length($vowels)),1);
} else {
$newchar = substr($consonants, rand(length($consonants)),1);
}
$s .= $newchar;
$alt = !$alt;
}
return chomp($s);
}