Tobi: Aktuelle Programmzeile

Hallo.

Ich habe ein etwas größeres Script gebastelt, das so an die 150 Datenbankabfragen benötigt. Normalerweise fängt man ja nun Abfragefehler mit "or die $dbh->errstr" oder $sth halt ab. Ich möchte jedoch nicht, daß das Script abgebrochen wird. Außerdem will ich langzeitmäßig beobachten, was für Fehler auftreten. Darum habe ich eine Funktion gebastelt, die die Fehler mit Datum in eine Datei loggt. Netterweise wird bei die ja immer die #Programmzeile dazugeschrieben, wenn das Programm wegen einem Fehler abgebrochen wird. Das passiert bei meiner Funktion nun nicht. Gibt es irgendeine Variable, die die aktuell bearbeitete Programmzeile enthält? Kann mir da jemand weiterhelfen?

Bis dann...

  1. Hallo.

    Ich habe ein etwas größeres Script gebastelt, das so an die 150 Datenbankabfragen benötigt. Normalerweise fängt man ja nun Abfragefehler mit "or die $dbh->errstr" oder $sth halt ab. Ich möchte jedoch nicht, daß das Script abgebrochen wird. Außerdem will ich langzeitmäßig beobachten, was für Fehler auftreten. Darum habe ich eine Funktion gebastelt, die die Fehler mit Datum in eine Datei loggt. Netterweise wird bei die ja immer die #Programmzeile dazugeschrieben, wenn das Programm wegen einem Fehler abgebrochen wird. Das passiert bei meiner Funktion nun nicht. Gibt es irgendeine Variable, die die aktuell bearbeitete Programmzeile enthält? Kann mir da jemand weiterhelfen?

    Bis dann...

    Hab doch noch was gefunden, wenn man die Geschichte andersrum aufzieht! Also für alle die vor einem ähnlichen Problem stehen:

    einfach folgendes in die aufgerufene Funktion übernehmen

    (my $Package, my $Datei, my $Zeile) = caller();

    In den Variablen stehen dann die benötigten Werte. Genauere Daten gibts hier auf Selfhtml

  2. Hallo

    Ich habe ein etwas größeres Script gebastelt, das so an die 150 Datenbankabfragen benötigt. Normalerweise fängt man ja nun Abfragefehler mit "or die $dbh->errstr" oder $sth halt ab.

    ist das in Perl wirklich üblich?

    Ich möchte jedoch nicht, daß das Script abgebrochen wird. Außerdem will ich langzeitmäßig beobachten, was für Fehler auftreten.

    Ein Skript einfach abzubrechen, hat mit Fehlerbehandlung _nichts_ zu tun. In keiner Programmiersprache. Das ist einfach nur schlechter Stil.

    Darum habe ich eine Funktion gebastelt, die die Fehler mit Datum in eine Datei loggt.

    Das ist grundsätzlich eine gute Idee. Erstens gibt es logische Fehler im eigenen Code, die zu einem Fehler führen können, zweitens gibt es eine Menge Fehler, gerade beim Zugriff auf Dateien und Datenbanken, die erwartet werden können und angemessen behandelt werden sollten. Dem Benutzer sollte eine Rückmeldung gegeben werden, mit denen der Benutzer etwas anfangen kann, die er aber nicht mißbrauchen kann.

    Netterweise wird bei die ja immer die #Programmzeile dazugeschrieben, wenn das Programm wegen einem Fehler abgebrochen wird. Das passiert bei meiner Funktion nun nicht. Gibt es irgendeine Variable, die die aktuell bearbeitete Programmzeile enthält? Kann mir da jemand weiterhelfen?

    Das scheinst Du ja gefunden zu haben.

    Freundliche Grüße

    Vinzenz

    1. Ich habe ein etwas größeres Script gebastelt, das so an die 150 Datenbankabfragen benötigt. Normalerweise fängt man ja nun Abfragefehler mit "or die $dbh->errstr" oder $sth halt ab.
      ist das in Perl wirklich üblich?

      Das kann man so machen, so lange sich das Script in der Entwicklungsphase befindet. Wenn es im Produktiveinsatz ist, gilt Deine folgende Aussage auch für Perl-Skripte:

      Ein Skript einfach abzubrechen, hat mit Fehlerbehandlung _nichts_ zu tun. In keiner Programmiersprache. Das ist einfach nur schlechter Stil.

      Siechfred

      --
      Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.