use String::Random ; my $generator = new String::Random ; my $invalid_pass_re = qr/(\d{3}|\w{3}|[[:punct:]]{3})/ ; my $pass ; do { $pass = $generator->randregex('.{15}') ; } while ($pass =~ $invalid_pass_re) ; print "$pass\n" ;