Schrift
[thread]11658[/thread]

Mischung aus END und $SIG{__DIE__}



<< >> 2 Einträge, 1 Seite
betterworld
 2008-04-18 00:01
#108516 #108516
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Hallo,

wenn ein Programm mit einer Perl-Fehlermeldung abbricht, wird die Fehlermeldung ausgegeben und dann wird END (und auch DESTROY fuer Objekte) ausgefuehrt. Beispiel:
Code: (dl )
1
2
3
4
END {
print "foo\n";
}
nix();

Ausgabe:
Code: (dl )
1
2
Undefined subroutine &main::nix called at - line 4.
foo


Ich moechte es aber lieber anders herum haben. Das kann man mit $SIG{__DIE__} erreichen. Das mag ich aber immer nicht so gern, weil es sich in Exception-Handling einmischt. Man muesste es vor jedem eval mit local deaktivieren.

Gibt es da noch eine Moeglichkeit?

Mein eigentliches Problem ist es, dass die Konsole beim fehlerhaften Abbruch von Curses-Anwendungen immer total durcheinander ist und die Fehlermeldung schwer zu lesen ist. Das koennte ich vermeiden, wenn ich vor dem Ausgeben der Fehlermeldung ein endwin() ausfuehren kann.

Dann gibt es natuerlich noch die Moeglichkeit, das ganze Programm in ein eval{} zu tun und die Fehlermeldung selbst auszugeben. Mag ich aber irgendwie auch nicht, weil dann Code, der eigentlich ins Frontend-Modul gehoert, im Hauptscript stehen muss...
murphy
 2008-04-18 00:46
#108518 #108518
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
betterworld+2008-04-17 22:01:28--
[...]
Dann gibt es natuerlich noch die Moeglichkeit, das ganze Programm in ein eval{} zu tun und die Fehlermeldung selbst auszugeben. Mag ich aber irgendwie auch nicht, weil dann Code, der eigentlich ins Frontend-Modul gehoert, im Hauptscript stehen muss...


Sauber wäre doch eigentlich eine Lösung, die etwa so aussieht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use Frontend;

INIT {
  Frontend::init();
}

eval {
  Frontend::run();
};
if ($@) {
  Frontend::show_error($@);
}

END {
  Frontend::dispose();
}


Damit kannst Du den Fehler sogar in einem Cursesfenster anzeigen, es sei denn er fliegt dir in INIT oder END um die Ohren.
When C++ is your hammer, every problem looks like your thumb.
<< >> 2 Einträge, 1 Seite



View all threads created 2008-04-18 00:01.