Thomas Heumann: Unbekannte Anweisung

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

  1. 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

  2. $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.

  3. 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

    1. 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.

      1. 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

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
      2. 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

    2. 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

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Gök? Gök!
  4. 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?