[gelöst] Perl Zähler increment und definieren Variable

Begonnen von franky08, 28 Januar 2017, 22:54:06

Vorheriges Thema - Nächstes Thema

franky08

Hallo, irgendwie beiße ich mich fest. Wenn ich in Perl einen einfachen Counter definiere der sich durch ein Event getriggert um 1 erhöht, klemmt es an der definition der counter variablen. Diese muss ich am Anfang der sub definieren also setze ich z.B.
my $counter = 0
das bedeutet aber das bei jedem Aufruf der sub der counter wieder auf 0 gesetzt wird, wie kann ich die Variable deklarieren ohne das der Wert wieder auf 0 gesetzt wird. Zum testen habe ich mir mal folgendes gebaut:
sub Badlicht_counter()
{
my $blvalue = Value("Badlicht");
my $count = 0;

if ($blvalue eq "on") {
$count = $count + 1
}
fhem "set Badlicht_counter $count";
}


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

CoolTux

So wird counter immer 1 sein oder 0 bleiben. Aber nie mehr.
Und mach mal

$counter++
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

franky08

$counter++ gute Idee, hatte ich schon aber mit Leerzeichen also als $counter ++, probiere ich mal, jetzt wird das nichts mehr, Frau ist schon genervt das der Rechner noch an ist, heute ist vietnamesisches Neujahrsfest (Tet).

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

#3
das wird nicht funktionieren.

Schreib mal in Deine 99_myUtils.pm folgende Zeilen


use vars qw($myCounter);
$myCounter = 0;


und zwar vor die Initialize-routine.

Damit definierst Du eine Variable $myCounter, die Du während der Laufzeit Deines FHEM systemweit verwenden kannst.

Achtung: nach einem FHEM Neustart oder einem Bearbeiten der 99_myUtils.pm steht der Zähler wieder auf 0!


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: betateilchen am 28 Januar 2017, 23:14:39
das wird nicht funktionieren.

Was genau? Die ganze Funktion oder nur der einfache Zähler der wenn dann nur einmal hoch zählt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: CoolTux am 28 Januar 2017, 23:18:32
Was genau?

Eine Variable, die in einer Funktion definiert wird, steht nur innerhalb der Funktion zur Verfügung und nur solange, wie diese Funktion ausgeführt wird. Danach wird die Variable wieder vernichtet. Deshalb beginnt der Zähler bei jedem Funktionsaufruf wieder mit 0.

Und $count = $count + 1; bewirkt exakt das gleiche wie $count++;


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

#6
Genau das hat meine Frage beantwortet, betateilchen, es geht um die Initialisierung der Variable, wenn das in der Funktion passiert ( dort steht ja my $count = 0) dann ist die Variable bei erneuten Aufruf wieder 0, ich hatte im Netz schon einige Seiten durchsucht aber da ging es immer nur um foreach/while/until Schleifen.
@betateilchen
Danke, funktioniert, im Netz habe ich noch das hier gefunden:
https://books.google.de/books?id=e3AzXyzX7n4C&pg=PA176&lpg=PA176&dq=perl+use+vars+qw&source=bl&ots=3MLtzPLfQa&sig=Amr-fb9ev2AYC2NGhpMrmk-R9i8&hl=de&sa=X&ved=0ahUKEwiKnf63zefRAhXBF5oKHdmqCTgQ6AEISTAH#v=onepage&q=perl%20use%20vars%20qw&f=false
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1