JCB: was wird hier ersetzt und womit?

Guten Morgen!

Öhm, kann mir mal einer sagen was in folgenden Zeilen gemacht wird :):

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/<!--(.|\n)*-->//g;

Ich weiß das irgendwas ersetzt wird, nur was genau? Und auch die Flags "eg" irritieren mich etwas. Zumindest das "e".

Gruß,

Jan

  1. Hallo Jan,

    Öhm, kann mir mal einer sagen was in folgenden Zeilen gemacht wird :):

    Eigentlich das, was Du besser mit CGI.pm bzw. URI::Escape und HTML::Parser erledigen solltest (zumindest die erste Zeile ;)

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

    Hier werden URL-codierte Sonderzeichen (% + hexadezimale Darstellung des Asciiwert) wieder decodiert.
    Da im Erstezungsteil keine Zeichenkette, sondern Funktionen stehen, muss dieser Teil mit der Option /e evaluiert/ausgeführt werden.

    $value =~ s/<!--(.|\n)*-->//g;

    Das soll Kommentare auch über mehrere Zeilen entfernen. Allerdings wird das hier in der denkbar schlechtesten Form "erledigt".
    Zum einen ist die Klammer überflüssig, da man mit dem Modifier /s den . auch \n finden lassen kann.
    Zum Anderen wird _so_ alles zwischen dem ersten Auftreten von <!-- sowie dem letzten Auftreten von --> gelöscht, da der Quantifier * "gierig" ist, also versucht, so viel wie möglich zu finden. Mit einem ? dahinter kann man dem * dieses Verhalten "abgewöhnen". ;)
    Besser ist es aber imho, HTML mit dem HTML::Parser zu bearbeiten. Denn so wie ich die Sache sehe, folgt dieser Zeile bestimmt noch die, in der HTML-Tags entfernt werden sollen ;)

    Ich weiß das irgendwas ersetzt wird, nur was genau? Und auch die Flags "eg" irritieren mich etwas. Zumindest das "e".

    Hoffentlich ist es jetzt klarer. :) In perldoc perlre, perldoc perlop, perldoc perlfunc, perldoc CGI und perldoc HTML::Parser findest Du weitere Informationen zu den verwendeten Funktionen bzw. Operatoren sowie den Modulen, die dies für Dich sicherlich einfacher erledigen.

    Gruß Alex
    --
    http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

    1. Hoi,

      Öhm, kann mir mal einer sagen was in folgenden Zeilen gemacht wird :):

      Eigentlich das, was Du besser mit CGI.pm bzw. URI::Escape und HTML::Parser erledigen
      solltest (zumindest die erste Zeile ;)

      Oder mit CGI qw(escape unescape) ;-)

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

      Hier werden URL-codierte Sonderzeichen (% + hexadezimale Darstellung des Asciiwert)
      wieder decodiert.
      Da im Erstezungsteil keine Zeichenkette, sondern Funktionen stehen, muss dieser Teil
      mit der Option /e evaluiert/ausgeführt werden.

      Da streiten sich die Geister. Evaluate oder Execute -- letztenendes auch egal, es wird
      ausgefuerhrt ;-)

      Zum einen ist die Klammer überflüssig, da man mit dem Modifier /s den . auch \n finden
      lassen kann.

      Auch sollte man gruppierende Klammern in der Form

      (?:ausdruck)

      notieren.

      Besser ist es aber imho, HTML mit dem HTML::Parser zu bearbeiten. Denn so wie ich die
      Sache sehe, folgt dieser Zeile bestimmt noch die, in der HTML-Tags entfernt werden sollen ;)

      Tja, da waer ich nicht so sicher:

      http://aktuell.de.selfhtml.org/archiv/doku/7.0/tga.htm#a3
      http://selfhtml.teamone.de/cgiperl/intro/cgihtml.htm#wechselwirkung_html_cgi

      In perldoc perlre, perldoc perlop, perldoc perlfunc, perldoc CGI und perldoc HTML::Parser

      *lol*

      Gruesse,
       CK

      1. Besser ist es aber imho, HTML mit dem HTML::Parser zu bearbeiten. Denn so wie ich die
        Sache sehe, folgt dieser Zeile bestimmt noch die, in der HTML-Tags entfernt werden sollen ;)

        Tja, da waer ich nicht so sicher:

        http://aktuell.de.selfhtml.org/archiv/doku/7.0/tga.htm#a3
        http://selfhtml.teamone.de/cgiperl/intro/cgihtml.htm#wechselwirkung_html_cgi

        Ich mir auch nicht, denn genau da hab ichs her ;).

        Gruß,

        Jan

      2. Hallo CK,

        [URL-codierung mit URI::Escape unescape()n]

        Oder mit CGI qw(escape unescape) ;-)

        Wobei ich mir mal habe sagen lassen, man (und frau ;) solle das lieber nicht verwenden,
        da es nicht dokumentiert ist, weshalb sich die Funktionsbezeichner ohne Vorwarnung ändern könnten.
        Ob das allerdings gemacht wird, da es wohl oft (von mir auch schon) verwendet wird, und die Funktionen
        nicht durch einen führenden Unterstrich zur ausschließlich internen Verwendung gekennzeichnet sind, wäre
        mal zu erörtern :).

        [URL-unescape()n mit evaluierendem (/e) Ersetzungsteil in einem RegEx]

        Da streiten sich die Geister. Evaluate oder Execute -- letztenendes auch egal, es wird
        ausgefuerhrt ;-)

        Sage wir doch einfach, es wird evaluiert, welches Ergebnis bei einer Execution herauskäme ;)

        [(?:...) statt (...) wenn Teilfundspeicherung nicht nötig ist]

        Besser ist es aber imho, HTML mit dem HTML::Parser zu bearbeiten. Denn so wie ich die
        Sache sehe, folgt dieser Zeile bestimmt noch die, in der HTML-Tags entfernt werden sollen ;)

        Tja, da waer ich nicht so sicher:

        http://aktuell.de.selfhtml.org/archiv/doku/7.0/tga.htm#a3
        http://selfhtml.teamone.de/cgiperl/intro/cgihtml.htm#wechselwirkung_html_cgi

        Das habe ich nicht auf die Version die in Selfhtml propagiert wird bezogen, sondern auf die
        vielen Abwandlungen bzw. Pseudoverbesserungen, die in "freien Skripten" der Skriptarchive schlummern. ;)

        In perldoc perlre, perldoc perlop, perldoc perlfunc, perldoc CGI und perldoc HTML::Parser

        *lol*

        Ich weis, daß es lieber gesehen wird, wenn auch Selfhtmlinterne Inhalte verwiesen wird.
        Die Links dazu kenne ich aber noch nicht auswendig, bzw. kenne ich den Inhalt und die Position
        der perldoc einfach besser :)

        Gruß Alex
        --
        http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

        1. Joho Alex,

          [URL-codierung mit URI::Escape unescape()n]

          Oder mit CGI qw(escape unescape) ;-)

          Wobei ich mir mal habe sagen lassen, man (und frau ;) solle das lieber nicht verwenden,
          da es nicht dokumentiert ist, weshalb sich die Funktionsbezeichner ohne Vorwarnung
          ändern könnten. Ob das allerdings gemacht wird, da es wohl oft (von mir auch schon)
          verwendet wird, und die Funktionen nicht durch einen führenden Unterstrich zur
          ausschließlich internen Verwendung gekennzeichnet sind, wäre mal zu erörtern :).

          Tja, ich wuerde mal sagen, der Herr Stein ist etwas zu ueberlegt, um die Funktion einfach
          umzubenennen ;-)

          [URL-unescape()n mit evaluierendem (/e) Ersetzungsteil in einem RegEx]

          Da streiten sich die Geister. Evaluate oder Execute -- letztenendes auch egal, es wird
          ausgefuerhrt ;-)

          Sage wir doch einfach, es wird evaluiert, welches Ergebnis bei einer Execution herauskäme ;)

          *lol*

          In perldoc perlre, perldoc perlop, perldoc perlfunc, perldoc CGI und perldoc HTML::Parser

          *lol*

          Ich weis, daß es lieber gesehen wird, wenn auch Selfhtmlinterne Inhalte verwiesen wird.
          Die Links dazu kenne ich aber noch nicht auswendig, bzw. kenne ich den Inhalt und die
          Position der perldoc einfach besser :)

          Och, darueber habe ich gar nicht gelacht, ich haette auch auf die Perldoc verwiesen. Aber
          ich fand es einfach lustig, wie du in feinster Linksetzer-Manier gleich 5 Verweise auf einmal
          postest *g*

          Gruesse,
           CK

    2. Hi Alex,

      danke für die Antwort. Hilft mir etwas weiter :).

      Gruß,

      Jan