Fehlermeldungen zählen

HPB

Erfahrenes Mitglied
Hallo,
gibt es eine Möglichkeit die Fehlermeldungen, die bei der Ausführung entstehen (können, aber nicht sollen :)) abzufangen? Also solche, die nicht unmittelbar zum Programmabruch führen?
Mein Problem ist folgendes: Mein Script ist im wesentlichen ein Parser, der sehr viele Daten ausgibt. Wenn irgendwo eine Fehlermeldung auftritt, merke ich es aufgrund der Größe der Ausgabe nicht direkt. Daher würde ich gerne am Ende eine Zusammenfassung der Fehlermeldungen bringen.
--> Während der Ausführung erkennen, dass ein Fehler aufgetreten ist und Info in Array o.ä. speichern.
 
Was bezeichnest Du als Fehler Du scheinst nicht die Fehler des Quelltextes zu meinen, sondern eher was anderes... Kannst Du mal Beispiele zeigen?
 
Ich meine Fehlermeldungen bei denen das Script weiterläuft (wielleicht müsste man sie besser als Warnungen bezeichnen?)

hier ein Beispiel:
Use of uninitialized value in pattern match (m//) at [...] line 363.
 
Sowas sollte man nicht zählen, sondern vermeiden...

z.B.:
Code:
#! /usr/bin/perl

my @array = qw(dies ist ein test);

for(0..10){
  next unless($array[$_]);
  print $1,"\n" if($array[$_] =~ m/(i)/);
}

Hier wirst Du keine Warnungen bekommen, obwohl es kein $array[8] gibt, da ich am Anfang der Schleife überprüfe, ob es den Wert überhaupt gibt. Und ich bekomme keine Warnung bei der Ausgabe, weil ich auch hier erst frage, ob es überhaupt einen Treffer gibt...
 
Dass man Fehler vermeinden sollte, ist mir auch klar. Mein Problem ist eher praktischer Natur:
Ich modifiziere den Code (oder auch nur die Eingabedaten) an einer beliebigen Stelle. Dann gibt es (weil beim Coding nicht alle Möglichkeiten berücksichtigt) eine dieser Warnungen.
Da mein Script nicht nur 5 Zeilen ausgibt (eher so 500-1000), ist natürlich ziemlich schwierig, die Ausgabe nach Warnungen zu durchsuchen. Deswegen würde ich die Warnungen halt gerne
a) Abfangen, damit der Code dort abbricht
b) Am Ende anzeigen, dass es Warnungen gab ODER
c) wenigstens einen Zähler am Ende ausgeben, der sag ob es Warnungen gab.

Geht so etwas in Perl?
 
Dann arbeite mit $SIG{__WARN__}

Code:
#! /usr/bin/perl

use strict;
use warnings;

my $counter = 0;
$SIG{__WARN__} = \&count;

my $string;

for(0..10){
  print $string,"\n";
}

print $counter," Warnungen\n";

sub count{
  $counter++;
}
 
Perfekt! Aber kann ich die Fehlermeldungen auch irgendwie am Ende ausgeben? (also den Text der Warning?)
 
Code:
#! /usr/bin/perl

use strict;
use warnings;

my $counter = 0;
my @warnings;
$SIG{__WARN__} = \&count;

my $string;

for(0..10){
  print $string,"\n";
}

print $counter," Warnungen\n";
print $_,"\n" for(@warnings);

sub count{
  $counter++;
  push(@warnings,@_);
}
 

Neue Beiträge

Zurück