f password-gen.pl
#!/usr/bin/perl
# code released by David Douthitt into the public domain
use Getopt::Long;
Getopt::Long::Configure('bundling');
GetOptions( 'l=i' => \$opt_l,
'p=s' => \$opt_p,
'm=i' => \$opt_m );
$pat{"ext"} = "[[:alnum:][:punct:]]";
$pat{"alnum"} = "[[:alnum:]]";
$pat{"alpha"} = "[[:alpha:]]";
$pat{"simple"} = "[a-km-z2-9]";
$pat{"normal"} = "[a-km-z2-9A-HJ-NPR-Z]";
if (defined($opt_p)) {
if (defined($pat{$opt_p})) {
$pat = $pat{$opt_p};
} else {
print "undefined pattern!\n";
exit(1);
}
} else {
$pat = $pat{"normal"};
}
$max = (defined($opt_m) ? $opt_m : 1000);
$len = (defined($opt_l) ? $opt_l : 6);
$x = $len;
for $i (0..$max) {
$c = chr(int(rand(255)));
if ($c =~ /$pat/o) {
$s .= $c;
if (--$x == 0) {
print "$s\n";
$x = $len;
$s = "";
}
}
}