Lösung für bp-Fehler-abfangen bzw. eval() und $@ - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Jurenda (305 Beiträge) am Mittwoch, 17.August.2005, 19:46.
    Lösung für bp-Fehler-abfangen bzw. eval() und $@

      Schon in mehreren Forumsbeiträgen wurde erstaunt festgestellt, daß irgendwie dieses $@ in baseportal nicht hinhaut.

      Siehe auch http://baseportal.de/cgi-bin/baseportal.pl?htx=/direkt/forum/suchen&cmd=search&suchen=$@

      Ich hab jetzt einen Workaround gefunden, der explizit dieses $@ nachstellt:

       $code = '... beliebige Fehler ...';
       local $SIG{__DIE__} = sub { $@="@_"; };		# im Fehlerfall $@ nachstellen
       $@=''; eval($code);				# $@ zurücksetzen und eval()
       if ($@) {
        out "Es ist der Fehler '$@' aufgetreten!<br>\n";
       }
      

      Hier mehrere Beispiele:

       <hr><h3>Beispiel:</h3><perl>
       local $SIG{__DIE__} = sub { $@="@_"; };
       $code1 = ' out "... Stringende vergessen;';
       $@=''; eval($code1); out "FEHLER: '$@'<br>\n" if $@;
       $code2 = ' my $test = 1/0; ';
       $@=''; eval($code2); out "FEHLER: '$@'<br>\n" if $@;
       $code3 = ' &vergessen();';
       $@=''; eval($code3); out "FEHLER: '$@'<br>\n" if $@;
       $code4 = ' out "kein Fehler :)";';
       $@=''; eval($code4); out "FEHLER: '$@'<br>\n" if $@;
       </perl><hr>
      

      Grüße Jurenda


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Jurenda (305 Beiträge) am Mittwoch, 17.August.2005, 19:46.
    Lösung für bp-Fehler-abfangen bzw. eval() und $@

      Schon in mehreren Forumsbeiträgen wurde erstaunt festgestellt, daß irgendwie dieses $@ in baseportal nicht hinhaut.

      Siehe auch http://baseportal.de/cgi-bin/baseportal.pl?htx=/direkt/forum/suchen&cmd=search&suchen=$@

      Ich hab jetzt einen Workaround gefunden, der explizit dieses $@ nachstellt:

       $code = '... beliebige Fehler ...';
       local $SIG{__DIE__} = sub { $@="@_"; };		# im Fehlerfall $@ nachstellen
       $@=''; eval($code);				# $@ zurücksetzen und eval()
       if ($@) {
        out "Es ist der Fehler '$@' aufgetreten!<br>\n";
       }
      

      Hier mehrere Beispiele:

       <hr><h3>Beispiel:</h3><perl>
       local $SIG{__DIE__} = sub { $@="@_"; };
       $code1 = ' out "... Stringende vergessen;';
       $@=''; eval($code1); out "FEHLER: '$@'<br>\n" if $@;
       $code2 = ' my $test = 1/0; ';
       $@=''; eval($code2); out "FEHLER: '$@'<br>\n" if $@;
       $code3 = ' &vergessen();';
       $@=''; eval($code3); out "FEHLER: '$@'<br>\n" if $@;
       $code4 = ' out "kein Fehler :)";';
       $@=''; eval($code4); out "FEHLER: '$@'<br>\n" if $@;
       </perl><hr>
      

      Grüße Jurenda

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 17.August.2005, 20:46.
    Re: Lösung für bp-Fehler-abfangen bzw. eval() und $@

      Mmh, dann wärs doch sinnvoll, gleich

      local $SIG{__DIE__} = sub { $@="@_"; };

      ins "sub run" (weisst schon wo ;-) )einzubauen, oder? ;-)

      Wie kommts zu dem Fehler, weisst das? Ich tippe auf Namespace-Kram ;)

     Antworten

    Beitrag von Jurenda (305 Beiträge) am Mittwoch, 17.August.2005, 21:32.
    Re: Lösung für bp-Fehler-abfangen bzw. eval() und $@

      Neee, ganz technisch möchte ich hier nicht werden ;)

      Nun ja, jedenfalls muß für ein korrektes FUnktionieren immer vor einem eval() das $@ zurückgesetzt werden.

      Und daß ist für den normalen User nicht ganz einsichtig, wenn beim ersten eval() alles hinhaut, und ab dem zweiten eval() ...

      Die beste Lösung wäre ein Überschreiben von eval() mit folgendem:

       sub _eval {
         local $SIG{__DIE__} = sub { $@="@_"; };
         $@='';
         eval($_[0];
       }
      

      Nur ist das denke ich etwas 'technisch', und vor allem wegen dem eval BLOCK sicher etwas 'schwierig'.

      Ursache?

      Na klar, unser Safe.pm, denn das macht eigentlcih bei mehreren eingebauten Variablen gewisse Probleme ;(((

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 18.August.2005, 01:58.
    Re: Lösung für bp-Fehler-abfangen bzw. eval() und $@

      Ok, eval kann nicht überschrieben werden... (weisste sicher) ;-)

      #define eval _eval
      

      günge mit dem -p flag... Ob das die Sache lohnt? Zweifel...

      Aber so eine Subroutine wie die obige zur Verfügung stellen: Warum nicht - wers braucht freut sich dass es da ist ;-)

     Antworten


     
 Liste der Einträge von 22951 bis 23101:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.05s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!