Jörk Behrends: Funktion "pack()"

Beitrag lesen

Hi!

Ich besitze leider nur ganz dürftge Dokumentationen über Perl. Leider kann ich aber mit der folgenden Code-Zeile (kopiert aus einem GästebuchScript) nichts anfangen. Durch was wird hier ersetzt? Ich kenne das pack("C"... nicht. Was bedeuted das?

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

Ganz einfach:
Bei einem CGI-Aufruf werden Sonderzeichen durch Ihren Hexadezimalwert repräsentiert. Dies geht auch für nicht-Sonderzeichen. Z.B ist space der 32te ASCII Wert also in hex: 20. Die Repräsentation wird durch ein % angezeigt.

Um nun einen solchen String in Perl vernünftig verarbeiten zu können. Müßen die Hex-Repräsentationen in "echte" Character (dafür das 'C') gewandelt werden. Dazu werden sämtliche %xx Stellen (mit x = 0-9 oder a-f) ersetzt. xx wird gewandelt in eine Zahl durch hex($1) und hierzu wird der entsprechende Character-Wert erzeugt und eigesetzt.

Jörk