richtig, meine Klasse Scaliger in der Anwendung estash nutzt Exceptions zur Fehlerbehandlung von Eingabefehlern.
Sowas kann man machen, wenn man davon ausgehen kann, daß die entsprechenden Funktionen, also auch der Konstruktor, sämtliche Argumente aus Benutzereingaben bekommen. So wird einfach eine EX geworfen und an den dazugehörigen Text ein \n
gehängt um den Backtrace zu unterdrücken. Schließlich will der Benutzer ja nur wissen woran das Problem lag und nicht in welcher Zeile es geknallt hat.
In mit Carp::croak()
geworfenen Exceptions hingegen lässt sich der Backtrace nicht unterdrücken. Denn der soll ja den Programmierer stets auf seine eigene fehlerhaft Zeile führen.
use strict;
use warnings;
use Carp;
sub new{
my $class = shift;
my $initnr = shift;
return eval{
croak "Nr required!" unless $initnr;
bless{ NR => $initnr}, $class;
};
}
my $m = main->new() or die $@;
Wenn die Instanz nicht erstellt werden konnte, zeigt der Backtrace auf die Zeile wo der Konstruktor fehlerbehaftet aufgerufen wurde.
MfG