Zitat von
alcaeus:
Kommt schon Jungs, es muss doch jemanden geben, der ein bisschen Perl kann
Hat jemand gerufen?
speichert den 3. Kommandozeilenparameter in $cmd
Der =~ Operator mapped für das Statement $cmd auf $_ (die Standardskalarvariable), denn s/// arbeitet immer mit der Standardskalarvariable. s/// ist einfach eine Ersetzung des regulären Ausdruckes (.*);$ durch den ersten Match $1. Die Buchstaben eg sind Parameter, g steht für global und bedeutet das die Ersetzung überall gemacht wird und nicht schon nach der ersten Ersetzung endet. Wofür e steht müßte man jetzt mal im Handbuch nachschauen... ich vermute etwas mit dem escapen. Die Zeile entfernt einfach ein endstehendes Semikola.
Code:
$cmd=~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
Das s/// ersetzt hier alle Matches durch was ganz lustiges. Die uc() Funtkion gibt den Parameter in Großbuchstaben zurück, und sprintf macht das was man von sprintf erwartet. ord ist auch wie in Pascal zu verstehen, $1 ist wieder der Match. Es konvertiert als den
ASCII-Wert aller Zeichen in 2stellige Hex-Zahlen mit nem % davor.
der Code ist aber ziemlich dumm, das geht auch kürzer und effektiver in Perl.