Unbekannte Anweisung
Thomas Heumann
- perl
0 rob0 Struppi0 steckl0 Thomas Heumann
Hallo Forumsleser!
Ich bin gerade dabei ein PERL-Script auf HTML umzuschreiben. Meine Kenntnisse in PERL sind nur rudimentär (also, ich weiss i.d.R. schon, was ich da mache), aber ich bin nun auf eine Anweisung gestossen, die ich mir nicht erklären kann:
$FORM{'comments'} =~ s/\cM\n/<br />\n/g;
Da ich hier keinen Befehl etc. erkennen kann, weis ich auch nicht, nach was ich in den Hilfen etc. suchen soll.
Hat jemand eine Idee bzw. kann mir sagen, was diese Zeile bewirken soll bzw. nach wass ich in der Hilfe oder in Foren suchen soll?
Danke schon mal!
Gruß
Thomas
Hi!
Ich bin gerade dabei ein PERL-Script auf HTML umzuschreiben.
Wie soll das denn funktionieren? HTML ist doch keine Programmiersprache.
$FORM{'comments'} =~ s/\cM\n/<br />\n/g;
Da ich hier keinen Befehl etc. erkennen kann, weis ich auch nicht, nach was ich in den Hilfen etc. suchen soll.
Schau nach regulären Ausdrücken.
Schöner Gruß,
rob
$FORM{'comments'} =~ s/\cM\n/<br />\n/g;
Da ich hier keinen Befehl etc. erkennen kann, weis ich auch nicht, nach was ich in den Hilfen etc. suchen soll.
[http://perldoc.perl.org/perlop.html]
Quote and Quote-like Operators
Hat jemand eine Idee bzw. kann mir sagen, was diese Zeile bewirken soll bzw. nach wass ich in der Hilfe oder in Foren suchen soll?
Er ersetzt Zeilenumbrüche zu XHTML Zeilenumbrüche.
Die Zeile deutet darauf hin, dass es sich hier um ein Skript handeln kann, dass mit einem globalen HASH arbeitet in dem die CGI Parameter gespeichert werden, was keine gute Lösung ist. Vermutlich wird auch nicht das CGI Modul genutzt um diese auszuwerten.
Struppi.
Hi,
$FORM{'comments'} =~ s/\cM\n/<br />\n/g;
Da ich hier keinen Befehl etc. erkennen kann, weis ich auch nicht, nach was ich in den Hilfen etc. suchen soll.
Das soll wohl regulaerer Ausdruck (auch regular expression oder regExp) sein, der jedoch bei Syntax-Fehler enthaelt.
Bist du dir sicher, dass dein Perl-Programm so laeuft?
Hat jemand eine Idee bzw. kann mir sagen, was diese Zeile bewirken soll bzw. nach wass ich in der Hilfe oder in Foren suchen soll?
Regulaere Ausdruecke werden verwendet um in einem String bestimmte Zeichenketten zu suchen (oder auch zu ersetzen).
Dein Ausdruck sollte wohl so aussehen:
$FORM{'comments'} =~ s/\cM\n/<br />\n/g;
oder besser:
$FORM{'comments'} =~ s#\cM\n#<br />\n#g;
Das s vor der ersten Raute steht fuer substitude (ersetzen).
Das g am Ende heisst, dass jedes Muster das gefunden wird ersetzt wird (ohne g wird nur das erste ersetzt).
Die Syntax ist wiefolgt:
s#zuErsetzendesMuster#neuerText#g
Dein Beispiel ersetzt, in dem String $FORM{'comments'}, also alle Folgen von \c (bin mir nicht sicher, aber kann sein, dass es ein Backspace ist), M und \n (Zeilenubruch) durch ein br-Tag mit anschliessendem Zeilenumbruch.
mfG,
steckl
Dein Beispiel ersetzt, in dem String $FORM{'comments'}, also alle Folgen von \c (bin mir nicht sicher, aber kann sein, dass es ein Backspace ist)
http://search.cpan.org/~tty/kurila-0_02/pod/perlrebackslash.pod
Struppi.
http://search.cpan.org/~tty/kurila-0_02/pod/perlrebackslash.pod
http://perldoc.perl.org/perlretut.html#More-on-characters%2C-strings%2C-and-character-classes ;)
Siechfred
Dein Beispiel ersetzt, in dem String $FORM{'comments'}, also alle Folgen von \c (bin mir nicht sicher, aber kann sein, dass es ein Backspace ist)
http://search.cpan.org/~tty/kurila-0_02/pod/perlrebackslash.pod
Danke,
also ist "\cM" es gleichbedeutend mit "\r", oder?
mfG,
steckl
Hallo steckl!
Die Syntax ist wiefolgt:
s#zuErsetzendesMuster#neuerText#g
Zum besseren Verständnis vielleicht noch so:
s[delimiter]zuErsetzendesMuster[delimiter]neuerText[delimiter]flag(s)
Jeder gewählter Delimiter (Begrenzerzeichen) hat den Nachteil, dass er maskiert werden muss, wenn er im Suchmuster vorkommt. So ist der ansonsten praktische Schrägstrisch äußerst unbequem, wenn z.B. Verzeichnispfade als Suchmuster herhalten müssen:
s//ordner/unterordner/datei//neuerordner/neuerunterordner/datei/g
da verliert man vor lauter Slashs und Backslashs schnell den Überblick, den man hier besser behält:
s!/ordner/unterordner/datei!/neuerordner/neuerunterordner/datei!g
Zum Thema Spam: Auch in einem Perl-Gästebuch kann man Spambarrieren bauen und man muss also nichts in PHP umschreiben. Aber jedem das Seine - ich kann mich mit PHP irgendwie nicht anfreunden, vielleicht sollte ich mich dazu zwingen ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo!
Danke an alle (steckl, Struppi, etc.).
Das hat mir sehr geholfen!
Hatte einen kleinen Logikfehler in meinem ersten Posting. Meinte natürlich PHP und nicht HTML ;)
Es hat sich um ein uraltes Gästebuch gehandelt. Aber auch wir sind von einem SPAM-Roboter gefunden worden und da lag es an der Zeit, dies an neuere Gegebenheiten anzupassen.
Werde diesen Ausdruck in PHP mit nl2br umsetzen. Jeder Zeilenumbruch wird durch ein HTML-<br /> ersetzt.
Nochmals danke!
Gruß
Thomas
PS: Kennt jemand eine gute Seite zu dem Thema SPAM-Schutz bei Gästebüchern?