Alex: Perl findet Einfügemarkierung nicht

Liebe selfhtmler,

vielleicht mag der eine oder andere denken: "Das ist doch ganz einfach!", aber leider habe ich seit einer Woche intensiver Recherche keine Antwort darauf, warum mein Perlskript die von mir festgelegte Einfügemarkierung <!-- NEU  nicht findet.
Das Skript ist (denke ich) ziemlich exakt das was Stefan im Kapitel über Gästebuchskript vorschlägt, außer dass es sich um einen kleinen Flohmarkt handelt. Nur leider liefert das Skript bei:
foreach $Zeile (@Zeilen) {               # @Zeilen = zuvor eingelesene Zeilen der Datei
  if(/<!-- NEU -->/) {                     # Aha, Eintrag hier einfügen
kein Resultat, selbst wenn ich die ganze Datei mit <!-- NEU  zutagge.
Auch die Syntax
if(/^<!-- NEU -->/) {
führt zu nichts ...
Andere Skripts arbeiten auch mit dieser Syntax - und laufen.
Ich möchte hier nicht ewigen Quelltext eingeben, daher ein paar Links:
http://www.userpage.fu-berlin.de/~alex4all/cgi/flohmarkt.html
ist die geplante Flohmarktseite mit die die Angebote aufnehmen soll,
http://www.userpage.fu-berlin.de/~alex4all/cgi/eingabe.html
ist die Seite zur Eingabe neuer Angebote,
http://www.userpage.fu-berlin.de/~alex4all/cgi/flohmarkt.cgi
ist das verarbeitende Skript,
http://www.userpage.fu-berlin.de/~alex4all/cgi/cgi-quelle.html
ist der Quelltext des Skripts als HTML zum einfachen lesen.

Ich wäre superfroh, wenn mir jemand helfen könnte, da ich bei meiner eigenen Suche nach geegneten Quellen immer nur entweder auf Programmfragmente oder Gigaskripts mit tausenden von Abfragen und Subroutinen stosse, die ich nicht verstehe.

Danke, Danke, Danke

Alex

  1. Moin Moin !

    Lies die Perl-Doku, insbesondere perlop und perlre. Was Du da zusammenschreibst, sieht zwar wie eine RE aus, (ist sogar eine), aber sie tut garantiert nicht das, was Du willst. Da fehlt escaping einiger Zeichen. Perl ist zwar ganz gut im Erraten (Do what I mean), aber bei Deinem Code muß Perl die Waffen strecken. Vielleicht willst Du auch gar keine RE benutzen, sondern index, substr, chomp und eq. Die sind alle in perlfunc und perlop beschrieben.

    Ich verrate Dir jetzt nicht genauer, was Du falsch machst, denn offensichtlich hast Du nicht viel Ahnung von dem, was Du tust, und das ist im WWW-Umfeld sehr gefährlich.

    Übrigens ist Perl nicht equivalent mit CGI. CGI ist eine Schnittstelle, Perl eine Programmiersprache.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    Für eine bessere Übersichtsdarstellung des Forums: http://cforum.teamone.de/phpbt/bug.php?op=show&bugid=103&pos=2
    1. Hallo Alexander,

      ich gebe zu, dass ich mit Perl absoluter Anfänger bin und dachte mir, learning by doing, so wie bereits mit HTML zu betreiben. Es ist deshalb garantiert nicht so, dass ich bloß zu faul wäre, die ganze Perldoku durchzulesen, aber ab einem gewissen Punkt kommt man nicht weiter, wenn man nicht mal selber was zusammenbaut.
      http://selfhtml.teamone.de/cgiperl/sprache/cgitypisch.htm#gaestebuch hier beschreibt Stefan das Öffnen und Neuschreiben einer Datei, als wäre es nicht weiter nötig einen zusammenhängenden Quelltext anzuzeigen - daher dachte ich es sollte doch recht einfach sein. Ich würde gerne mehr am konkreten Beispiel lernen und lese mir auch alle relevanten Kapitel der Doku nochmal durch, aber zu den Stichwörtern perlop und perlre oder perlfunc finde ich über die Suchmaske garnichts.
      Würdest Du mir nochmal die genauen Stellen in der Doku verraten (und vielleicht noch zwei kleine Tipps gratis dazugeben ...)? Sonst hat mir Dein Posting nämlich nichts geholfen außer mich zu entmutigen.
      Richtig nett fände ich es aber, wenn Du mir sagen würdest was an dem Skript falsch ist und dann auf die entsprechenden Stellen in der Doku verweist, das würde mich nämlich sehr ermutigen und ich werde weiter begeistert lernen und Dir das nächste Mal sachlichere Fragen stellen können ...

      Danke, das ist ein richtig nettes Forum :)

      Alex

      1. Moin Moin !

        Hallo Alexander,

        ich gebe zu, dass ich mit Perl absoluter Anfänger bin und dachte mir, learning by doing, so wie bereits mit HTML zu betreiben. Es ist deshalb garantiert nicht so, dass ich bloß zu faul wäre, die ganze Perldoku durchzulesen, aber ab einem gewissen Punkt kommt man nicht weiter, wenn man nicht mal selber was zusammenbaut.

        Richtig. Aber man muß es ja nicht gleich ins WWW stellen, das kann man auch erstmal auf einer abgeschotteten Kiste testen. Andererseits wollen wir hier ja auch gerne mal eine Seite "im Betrieb" sehen.

        [...] aber zu den Stichwörtern perlop und perlre oder perlfunc finde ich über die Suchmaske garnichts.
        Würdest Du mir nochmal die genauen Stellen in der Doku verraten (und vielleicht noch zwei kleine Tipps gratis dazugeben ...)?

        perlop, perlre und perlfunc sind die Namen der entsprechenden Man-Pages, die findest Du unter Unixen ganz einfach mit "man perlop" oder "perldoc perlop" usw., unter Windows (wenn Du ActivePerl benutzt) unter C:\perl\html\index.html (bei Standard-Installation). Im WWW gibt's die auch, z.B. bei http://www.perldoc.com: http://www.perldoc.com/perl5.8.0/pod/perlre.html http://www.perldoc.com/perl5.8.0/pod/perlfunc.html http://www.perldoc.com/perl5.8.0/pod/perlop.html (Wie Du am Link erkennen kannst, sind das die Man-Pages für die Version 5.8.0 - nicht großartig anders als 5.6.0, aber eben nicht identisch.)

        Sonst hat mir Dein Posting nämlich nichts geholfen außer mich zu entmutigen.

        War wohl etwas hart, was? Naja, was ist Dir lieber - ein "böser Ratgeber", der Dir mal kurz auf die Finger klopft, oder ein böser Angreifer, der aus Deinen Daten mal eben so nebenbei Bitsalat macht?

        Richtig nett fände ich es aber, wenn Du mir sagen würdest was an dem Skript falsch ist

        Das habe ich doch schon: In deinen REs (Regular Expressions) fehlen die Escapes für einige Zeichen, die in REs eine besondere Bedeutungen haben. Siehe perlop und perlre. Wie schon gesagt, kommst Du für Dein Problem auch ohne REs aus, ein simpler Sting-Vergleich müßte ausreichen.

        Danke, das ist ein richtig nettes Forum :)

        Trotz meines "bösen" Postings? Du paßt nicht in das übliche Fragen-und-weg-Schema. Gut.

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
        Für eine bessere Übersichtsdarstellung des Forums: http://cforum.teamone.de/phpbt/bug.php?op=show&bugid=103&pos=2
        1. Hallo Alexander,

          nochmal danke für Deine Mühe, ich bin nun dahintergekommen, was das Problem ist - wenn Du's Dir anschauen magst, ich habe die Syntax verändert und kommentiert unter
          http://www.userpage.fu-berlin.de/~alex4all/cgi/cgi-quelle.html
          Ich würde mich auch freuen Vorschläge zu bekommen, wie man das Skript in dem von Dir beschriebenen Sinne sicherer machen kann, damit kein Angreifer Datensalat produzieren kann.
          Und - das ist wirklich ein schönes Forum hier! - man sitzt ja sonst so allein davor und hier wird man gleich von den lieben Onkels an der Hand genommen :)))

          machs gut
          &
          liebe Grüße

          Alex

  2. foreach $Zeile (@Zeilen) {
      if(/<!-- NEU -->/) {

    versuch's so:

    for(@Zeilen) { if(/<!-- NEU -->/) {

    csx

    1. Liebe(r) csx,

      vielen Dank, vielleicht sind das ja auch die escapings, die Alexander gemeint hat

      versuch's so:

      for(@Zeilen) { if(/<!-- NEU -->/) {

      csx

      Hab ich schon probiert - geht aber auch nicht - ich frage mich gerade ersthaft, ob es überhaupt an der Syntax für die re liegt ?!?

      Vielleicht hat das Skript auch eine gravierende Sicherheitslücke, wegen der es vom Server nicht ausgeführt wird, eine von den Admins ließ bei der Einrichtung sowas fallen, von wegen "Macht nix, wenn Du kein perl kannst - unser Rechner läßt ungültige Skripts eh nicht zu ..."

      Trotzdem bin ich natürlich weiterhin sehr dankbar über Vorschläge und Modifikationen meiner zugegebenermassen sehr anfängerhaften Syntax.

      Ich schaue hier auch öfter noch mal rein :)

      thanx & CU

      Alex

  3. Hi!

    foreach $Zeile (@Zeilen) {               # @Zeilen = zuvor eingelesene Zeilen der Datei
      if(/<!-- NEU -->/) {                     # Aha, Eintrag hier einfügen

    Dein Regexp untersucht die Variable $_, das passt aber nicht ganz zu Deinem foreach-Statement.

    HTH && So long

    --
    Bier trinken fetzt!!!
    1. Dear Friend

      Dein Regexp untersucht die Variable $_, das passt aber nicht ganz zu Deinem foreach-Statement.

      YES!!!!
      Du hast absolut Recht - vorhin hab ich aus Spaß mal eine "richtige" Abfrage eingegeben und was über eine Woche nicht lief macht plötzlich alles was ich will ....!!!!
      Hach - ich bin ja soooooooo dankbar!
      Ich laß die neue Syntax noch ein wenig unter
      http://www.userpage.fu-berlin.de/~alex4all/cgi/cgi-quelle.html stehen, so dass sich andere verlorene Seelen das Problem nochmal angucken können.

      tschüß Euch allen und liebe Grüße

      Alex