Moin!
$pword = join'', map { chr($_) } (36..128)[ eval "int(rand(128-36))," x 8 ];
Das klappt auch wunderbar, und die Länge der Zeichenkette kann ich hier ja mit dem '" x n ];´ am Ende anpassen. Aber wie kann ich bestimmen, welche Zeichen enthalten sein dürfen?
Die verallgemeinerte Version dieser Codezeile koennte ungefaehr so aussehen:
@ALPHABET = ('a'..'z', 'A'..'Z', '0'..'9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+');
$PASSLENGTH = 20;
$pword = join('', map { $ALPHABET[int(rand(scalar(@ALPHABET)))] } (1..$PASSLENGTH));
print $pword;
Kann man natuerlich auch in eine Zeile zusammenfassen, aber dann ist es weniger aenderungsfreundlich. ;-)
Known issues: Sonderzeichen und Zahlen werden bei dem "Algorithmus" im Vergleich zu Buchstaben relativ selten generiert. Immerhin machen Buchstaben in obigem Alphabet 52 Zeichen aus, Zahlen und Sonderzeichen zusammen nur 22. Man moege sich ueberlegen, ob man dem mit einer Mehrfachnennung von Nicht-Buchstaben im Alphabet oder einem veraenderten Auswahlverfahren begegnen will.
So long