jsnewusr: Versuch, ein Perl-Script abzubrechen

Ich will ein Perl-Script abbrechen, wenn der reguläre Ausdruck falsch
ist. Nun bricht das Programm bei dem Namen aaa.bbb nicht ab, wenn
ich '!=' angebe, aber auch nicht wenn ich das Gegenteil '=~' angebe.
Ich habe nun gedacht,dass der Programmteil gar nicht durchlaufen
wird, aber wenn ich statt der if-Anweisung nur 'die;' angebe,
bricht das Programm ab.
Ich weiß mir leider nicht mehr zu helfen !

#!/usr/bin/perl -w
use strict;

NMS FormMail Version 3.14c1

use vars qw(......  $tname   .....);
use CGI;
BEGIN
{
  $DEBUGGING         = 0;
      ............
  $query = new CGI;
  $tname       = $query -> param('name');
  if ($tname ne "")
    {
     if ($tname != /^([a-zA-Z0-9\xE4\xF6\xFC\xC4\xD6\xDC\xDF])+$/)
       {
        die;
       };
    };

........

USER CUSTOMISATION << END >>

----------------------------

(no user serviceable parts beyond here)

}

........

  1. Ich weiß mir leider nicht mehr zu helfen !

    #!/usr/bin/perl -w
    use strict;

    NMS FormMail Version 3.14c1

    use vars qw(......  $tname   .....);
    use CGI;
    BEGIN

    Wieso der Begn Block, weißt du was der tut?

    {
      $DEBUGGING         = 0;
          ............
      $query = new CGI;
      $tname       = $query -> param('name');

    Hast du das Skript mal in der Konsole gestartet?
    Es dürfte so überhaupt nicht laufen.

    if ($tname ne "")
        {
         if ($tname != /^([a-zA-Z0-9\xE4\xF6\xFC\xC4\xD6\xDC\xDF])+$/)

    Du meinst wahrscheinlich !~

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Wieso der Begn Block, weißt du was der tut?

      Nein, weiß ich leider nicht (Perl-Anfänger) - ist aber in dem Script von sourceforge enthalten

      Hast du das Skript mal in der Konsole gestartet?
      Es dürfte so überhaupt nicht laufen.

      Habe keine Ahnung was das ist

      Du meinst wahrscheinlich !~

      Hatte ich ursprünglich, dann habe ich in einem Perl Handbuch gelesen !=

      Gruß
      jsnewusr

      1. hallo,

        Wieso der Begn Block, weißt du was der tut?
        Nein, weiß ich leider nicht (Perl-Anfänger) - ist aber in dem Script von sourceforge enthalten

        Man sollte keine Scripts einsetzen, die man nicht wirklich versteht. Daß es übrigens in SELFHTML auch ein Perl-Kapitel gibt, ist dir bekannt?

        Hast du das Skript mal in der Konsole gestartet?
        Es dürfte so überhaupt nicht laufen.
        Habe keine Ahnung was das ist

        Die Konsole? Hm. Welches System benutzt du denn? Unter Windows ist das die "Eingabeaufforderung". Ansonst kannst du auch in der Wikipedia mal nachschlagen.

        Was Struppi meint, ist, daß du auf deiner Konsole einfach mal
          perl scriptname
        einzugeben brauchst.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Man sollte keine Scripts einsetzen, die man nicht wirklich »» versteht.

          Ach wie wahr ! Aber dann wäre die Erstellung von Homepages mit einfachsten Prüfungen nur DV-Freaks vorbehalten. Das kann ich aber in meinem fortgeschrittenen Alter nicht mehr werden (Schluchz).
          Ich habe daher anhand einer Anleitung das angebotene Script modifiziert - mit viel Schweiß durch die bekannten Anfängerfehler.

          Daß es übrigens in SELFHTML auch ein
          Perl-Kapitel
          gibt, ist dir bekannt?

          Hab ich herangezogen, nur wie gesagt ohne grundsätzliche Kenntnisse
          gibst Du spätestens auf, wenn Du einen regulären Ausdruck siehst.
          Daher auch hier nur trie and error.

          Was Struppi meint, ist, daß du auf deiner Konsole einfach mal
            perl scriptname
          einzugeben brauchst.

          Dazu müsste ich erst einmal Perl einrichten. Wäre vielleicht in Angriff zu nehmen!
          Gruß
          jsnewusr

          1. hallo,

            ... in meinem fortgeschrittenen Alter ...

            ups. Ich bin der Alterspräsident hier. Im übrigen muß man nicht "Freak" sein, um ein Perl-Script zu verstehen. Man muß sich bloß ein bißchen mit Perl beschäftigen. Das können auch noch Achtzigjährige anfangen.

            Daß es übrigens in SELFHTML auch ein
            Perl-Kapitel
            gibt, ist dir bekannt?
            Hab ich herangezogen, nur wie gesagt ohne grundsätzliche Kenntnisse
            gibst Du spätestens auf, wenn Du einen regulären Ausdruck siehst.

            Nö, ich nicht. Allerdings verstehe ich den zarten Hinweis sehr gut. Ging mir, als ich begonnen habe, mich mit Perl zu beschäftigen, genauso.

            ... müsste ich erst einmal Perl einrichten. Wäre vielleicht in Angriff zu nehmen!

            Ähm ... ja. Gute Idee. Und wenn du nun noch verrätst, welches Betriebssystem du benutzt, könnte man dich an die entsprechende Stelle in SELFHTML oder in (m)einem Feature-Artikel verweisen.

            Fslls du nicht weißt, ob Perl nicht vielleicht doch schon vorhanden ist, gibst du auf der Konsole (du weißt ja jetzt, was das ist) einfach mal
              perl -v
            an. Bei Linux-Systemen gehört Perl zur Grundausstattung. Für Windows ist es kostenlos downloadbar.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hallo

              Hurra !!!
              Ich bin weiter!
              Mit dem "use CGI::Carp qw(fatalsToBrowser);"
              aus

              Perl-Kapitel

              gab es den zitierten Software error:

              Can't locate object method "new" via package "CGI" at feedback.pl line 79.
              BEGIN failed--compilation aborted at feedback.pl line 226.

              Mit "USE CGI;" erhalte ich die gewünschte Meldung.
              Danke Euch und wünsche eine gute Nacht - die haben wir uns verdient !

  2. hallo,

    Nun bricht das Programm bei dem Namen aaa.bbb nicht ab, wenn
    ich '!=' angebe, aber auch nicht wenn ich das Gegenteil '=~' angebe.
    aber wenn ich statt der if-Anweisung nur 'die;' angebe,
    bricht das Programm ab.

    Natürlich, dafür ist die ja auch da. Es bedeutet bloß keinen Abbruch (bei dem andere Scriptteile noch ausgeführt werden könnten), sondern eine radikale Beendigung. Daher wird "die" eigentlich an solchen Stellen nicht angewendet. Was passiert denn, wenn du das eigentlich übliche "exit" angibst?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Natürlich, dafür ist die ja auch da. Es bedeutet bloß keinen Abbruch »» (bei dem andere Scriptteile noch ausgeführt werden könnten), sondern »» eine radikale Beendigung. Daher wird "die" eigentlich an solchen »» »» Stellen nicht angewendet. Was passiert denn, wenn du das eigentlich »» übliche "exit" angibst?

      Ich will ja brutal abbrechen, allerdings nur wenn eine bestimmte
      Bedingung erfüllt ist. Nur wie gesagt es erfolgte kein Abbruch
      auch nicht bei der entgegengesetzten Bedingung.

      1. hallo,

        Ich will ja brutal abbrechen, allerdings nur wenn eine bestimmte
        Bedingung erfüllt ist.

        Nein, das willst du nicht. Sondern du willst dem, der mit einem unerlaubten Namen angewackelt kommt, eine hübsche Fehlerseite vor Augen halten, auf der steht: "hall, du $name, leg dir gefälligst nen ordentlichen Namen zu, den ich akzeptieren kann". Und genau das machst du eben mit exit;. Damit kannst du nämlich noch andere Subroutinen aufrufen und brichst nicht gleich das ganze Script ab.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo

          Nein, das willst du nicht. Sondern du willst dem, der mit einem

          unerlaubten Namen angewackelt kommt, eine hübsche Fehlerseite vor
           Augen halten, auf der steht: "hall, du $name, leg dir gefälligst
          nen ordentlichen Namen zu, den ich akzeptieren kann".
          Glaub mir, ich weiß besser was ich will.
          In diesem Falle wollte ich brutal abbrechen, um mich der Fehlerursache zu nähern.
          Diese habe ich inzwischen gefunden - Anfängerfehler: name statt Name (schäm, schäm).

          Ziel ist aber natürlich eine Meldung an den Anwender:
          Folgendes habe ich ohne Erfolg versucht:

          if ($tplz !~ /[1]*$/)
            {
             print "<HTML><HEAD></HEAD><BODY
               <H1>&nbsp;</h1><H1>&nbsp;</h1><H1>&nbsp;</h1><H1>&nbsp;</h1>
               <H1><CENTER>Unzulässiger Aufruf !!!</CENTER></h1></BODY></HTML>";
             exit;
            };

          Ich erhalte den Fehler 500 (int. Server Fehler).
          Hast Du auf Anhieb eine Idee ?
          Gruß
          jsnewusr


          1. 0-9 ↩︎

          1. hallo,

            print "<HTML><HEAD></HEAD><BODY
            Ich erhalte den Fehler 500 (int. Server Fehler).
            Hast Du auf Anhieb eine Idee ?

            Natürlich. Sie ist in http://de.selfhtml.org/perl/sprache/cginotwendig.htm nachlesbar.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Natürlich. Sie ist in
              http://de.selfhtml.org/perl/sprache/cginotwendig.htm
              nachlesbar.

              Jetzt muss ich Struppi recht geben.
              Irgend etwas stimmt jetzt mit den BEGIN - Blöcken nicht mehr, ich
              erhalte.

              Software error:

              Can't locate object method "new" via package "CGI" at feedback.pl line 77.
              BEGIN failed--compilation aborted at feedback.pl line 219.

              Darf ich Euch die ersten beiden Codeseiten senden? Ich nehme an, Ihr findet den Fehler auf Anhieb.
              Gruß
              jsnewusr

              1. hallo,

                Darf ich Euch die ersten beiden Codeseiten senden?

                Was heißt "senden"? Wenn sich das in einem erträglichen Rahmen hält (sagen wir mal, nicht viel mehr als 30 Zeilen), kannst du die hier posten. Wenn es "mehr" ist, lädst du das am besten auf irgendeine temporäre Adresse als Textdatei hoch und gibst dann hier die URL an.

                Ich nehme an, Ihr findet den Fehler auf Anhieb.

                Möglich, allerdings sollte man sich nicht darauf verlassen.

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                ss:| zu:) ls:& fo:) va:) sh:| rl:|