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

clms
 2015-03-24 15:16
#180335 #180335
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2015-03-24T13:15:22 jan99
Nur 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;

}


Nein, so funktioniert das nicht. Mein Beispiel-Package definiert kein Objekt mit Methoden sondern nur statische Funktionen. Den Funktionen wird auch kein Objekt oder Class-Typ als erstes Argument übergeben. Du hast deshalb in Deinem gesamten Skript auch nur eine Variable $ok. (Wenn Du mehrere brauchst, musst Du einen anderen Ansatz wählen.)

Entsprechend brauchst Du auch kein Objekt zu initialisieren. Die Funktionen werden mit dem Package-Namen als Prefix aufgerufen. Also so:
Code (perl): (dl )
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
}


Wenn Du der das EBL::Report:: vor den Aufrufen sparen willst, kannst du die Funktionen auch mit CPAN:Exporter eportieren.

2015-03-24T13:15:22 jan99
Die Variable des Packages wird immer mit an die Sub übergeben....?

Nein. Die my-Variabeln werden in meinem Beispielcode nie übergeben. Sie sind aber - weil im Package-Scope deklariert - hinter dem my im ganzen Package incl. der dort definierten Funktionen sichtbar und können dort auch verändert werden. Außerhalb des Packages kannst du dagegen nicht auf sie zugreifen. Deshalb brauchst Du dort Accessor-Funktionen wie Report::ok_count() um an den Wert zu kommen.

View full thread Tipp gesucht - Skriptübergreifende Counter