1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
{ # initialize counters my %counter = map { $_ => 0 } qw( Ok Warning Error Fatal ); sub increase_counter { my $id = shift; die "(E) Specified counter '$id' does not exist!\n" if not exists $counter{$id}; $counter{$id}++; } sub show_counter { for my $k ( sort keys %counter ) { printf "%10s : %s\n", $k, $counter{$k}; } } } # increase specified counter increase_counter('Ok'); # show values of all counters show_counter();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
package Report; use strict; use warnings; my ($ok,$warning,$error,$fatal) = (0,0,0,0); sub ok { my $msg = shift; $ok++; print "OK: ".$msg."\n"; } sub warning { $warning++; ... } sub error { $error++;...} sub fatal {$fatal++; ...} sub final_report { print "$ok OK, $warning WARNINGS, $rerror ERRORS, $fatal FATAL\n"; } sub ok_count { $ok}; sub warning_count {$warning;} sub error_count {$error;} sub fatal_count {$fatal;} 1;
QuoteAus "(Ok, Warning, Error, Fatal)" rate ich jetzt einmal, dass es Dir um ein Error-Reporting bei einem einzelnen Skript-Aufruf geht. Und am Ende des Skripts möchtest Du dann eine Statistik wie "34 OK, 23 Warnings, 1 Error, 0 Fatal" ausgeben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#!/usr/bin/perl use strict; use warnings; use utf8; use EBL::Report my $report_counter=Report; #... # dann ist meine Auswertung irgendwann zuende .. print "Anzahl OK: ".$report_counter->ok_count."\n"; exit(); # meine Sub sub meinefunktion { my counter = shift; # hier zähle ich den Counter hoch wenn irgendetwas ist # if .... $counter->ok; }
2015-03-24T13:15:22 jan99Nur zur "Sicherheit" einmal nachgefragt das würde dann wie folgt aussehen:
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24#!/usr/bin/perl use strict; use warnings; use utf8; use EBL::Report my $report_counter=Report; #... # dann ist meine Auswertung irgendwann zuende .. print "Anzahl OK: ".$report_counter->ok_count."\n"; exit(); # meine Sub sub meinefunktion { my counter = shift; # hier zähle ich den Counter hoch wenn irgendetwas ist # if .... $counter->ok; }
1 2 3 4 5 6 7 8 9 10 11 12
... use EBL::Report; ... # Auswertung print "Anzahl OK: ".EBL::Report::ok_count."\n"; ... sub meinefunktion { # für den Report-Counter muss NICHTS übergeben werden ... EBL::Report::ok(); # increment OK Counter }
2015-03-24T13:15:22 jan99Die Variable des Packages wird immer mit an die Sub übergeben....?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package EBL::ebl_error_counter; use strict; use warnings; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK) ; $VERSION = '1.0' ; require Exporter; @ISA = qw (Exporter AutoLoader) ; @EXPORT = qw (ok, warning, error, fatal, final_report, ok_count, warning_count, error_count, fatal_count); ...