User since
2006-03-21
1
Artikel
BenutzerIn
Hallo zusammen
Ich muss ein PHP Script umschreiben in Perl indem eine
eindeutige 32-stellige ID generiert wird.
md5 (uniqid (rand()))
Wie kann ich das mit Perl erstellen?
Besten Dank schon mal für Eure Hilfe.
User since
2003-08-04
14371
Artikel
ModeratorIn
Dafür gibt's die Funktion
rand (siehe
perldoc -f rand) und ein Modul (
Digest::MD5). Nur was das
uniqid macht, weiß ich nicht.
edit pq: s/Digenst/Digest/\n\n
<!--EDIT|pq|1142938353-->
User since
2003-08-04
7321
Artikel
ModeratorIn
du kannst das komplette konstruktur z.b. durch
sub GetUnique
{
return &Digest::SHA1::sha1_hex(join("", map { chr rand 256 } (1) x (shift || 64)));
}
ersetzen!
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
[quote=gates,21.03.2006, 00:42]Hallo zusammen
Ich muss ein PHP Script umschreiben in Perl indem eine
eindeutige 32-stellige ID generiert wird.
md5 (uniqid (rand()))
Wie kann ich das mit Perl erstellen?[/quote]
rand() ist klar. Bei uniqid() kann man sich eine Funktion vorstellen, die z. B. einen String aus Timestamp + Prozess-ID + Zufallszahl bildet. Das wird schon sehr einmalig. Ein Problem hast du dann eher durch md5(), weil eine Hashfunktion auch aus einer eindeutigen ID per se eben nicht einen ebenso eindeutigen Wert macht. Aber für deine Zwecke wird's vielleicht reichen.
User since
2005-08-17
1420
Artikel
BenutzerIn
uniqid generiert eine eindeutige ID basierend auf der aktuellen Zeit in Mikrosekunden. Das rand wird dabei als Prefix fuer diese eindeutige ID genommen. Wenn mans noch mehr "unique" will, kann man dem uniqid noch als 2. Parameter ein TRUE mitgeben.
User since
2003-08-06
2246
Artikel
ModeratorIn
[cpan=uniq id]erleuchtet[/cpan].
User since
2005-08-17
1420
Artikel
BenutzerIn
Aber nur ohne das Leerzeichen im Link ;)
User since
2003-11-28
3645
Artikel
ModeratorIn
Wenn der Code im Apache läuft, hat man üblicherweise Zugriff auf $ENV{UNIQUE_ID}.