Thread Tipp gesucht - Skriptübergreifende Counter (6 answers)
Opened by jan99 at 2015-03-24 11:23

clms
 2015-03-24 12:17
#180328 #180328
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
Hallo Jan,

wie immer in Perl gibt es dafür mehrere Möglichkeiten.
Je nach Anforderung scheiden manchen Lösungen aus und andere bieten Vorteile.

Mir ist noch nicht 100% klar, was Deine genauen Anforderungen sind.
Soll z.B. über mehrere Skript-Aufrufe gezählt werden oder hast Du nur einen Skript-Aufruf aber 'zig Stellen (u.U. über mehrere Module verteilt) an denen die Zähler inkrementiert werden?

Aus "(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.

Dazu würde ich das Error-Reporting in ein eigenes Modul auslagern und die Zähler dort auf Package-Level als my oder our Variablen deklarieren.
Beispiel (ungetestet):
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
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;


Im restlichen Skript rufst Du dann die Funktion Report::warning("Komischer Wert '$param' für XY") etc. auf.

Vorteil dieses Ansatzes ist obendrein, dass Du Dein Logging schön gekapselt hast und es so leicht das Format ändern, um Informationen zum Caller erweitern oder in eine File oder eine Datenbank umlenken kannst.

View full thread Tipp gesucht - Skriptübergreifende Counter