my @chars = ('a'..'z', 'A'..'Z', 0..9); my $plaintext_pass = do {{ local $_ = join "" => map {$chars [rand @chars]} 1..8; redo unless /[a-z]/ && /[A-Z]/ && /\d/; $_; }}; #### my @chars = ('a'..'z', 'A'..'Z', 0 .. 9); my $plaintext_pass; PICK: { $plaintext_pass = ''; $plaintext_pass .= $chars[rand @chars] for 1..8; /[a-z]/ && /[A-Z]/ && /\d/ or redo PICK for $plaintext_pass; }