Frage zu localtime

Begonnen von TomLee, 24 Juli 2022, 17:59:31

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

das at-Beispiel aus diesem älteren Thread klappt bei mir nicht so auf Anhieb:

Damit gibts die Meldung im Log:
2022.07.24 16:01:09 1: PERL WARNING: Use of uninitialized value $d[7] in modulus (%) at (eval 372602) line 1.
2022.07.24 16:01:09 3: eval: my $SELF=   $evalSpecials->{'%SELF'};{my @d = split(localtime(time)); if($d[7] % 2) { fhem("set OG_SZ_Sauger clean_zone All;set EG_Lager_Sauger pct 5") }}


localtime(time))
ergibt bei mir Sun Jul 24 17:22:59 2022

{my @d = split(localtime(time));;return $d[7]}
geht bei mir nicht, früher vlt. mal ?
Man muss den ersten Parameter (Pattern) angeben und weil die Rückgabe ja wie oben aussieht, gibts das achte Element nicht.

Wenn ich jedem "Element" eine Variable zuweise wie hier gleich zu Anfang beschrieben, bekomme ich yday zurück.

Kann mir wer bitte  erklären wie ich localtime in dem split anzugeben hätte das auf diese 9 Elemente zugegriffen wird, ich steh da gerade voll auf dem Schlauch ?

Wichtig ist es nicht mehr zur Umsetzung meines Vorhaben, das hab ich jetzt schon kürzer wie das verlinkte Beispiel gelöst (weil das hab ich bisher begriffen wie man direkt auf yday zugreift :P) würds aber trotzdem gerne verstehen wie ich das Array bekomme mit den 9 Elementen.

defmod at_Sauger at *11:30:00 {if(strftime("%j",localtime) % 2 ) { fhem("set OG_SZ_Sauger clean_zone All;;set EG_Lager_Sauger pct 5") }}

setstate at_Sauger Next: 11:30:00
setstate at_Sauger 2022-07-24 17:11:16 state Next: 11:30:00


Gruß

Thomas

DetlefR

Hallo,

localtime gibt das zurück was erwartet wird. Also bei $zeit Sun Jul 24 17:22:59 2022 und bei @zeit ein array mit 9 Werten. Das split kannst du weglassen.
Keine Ahnung, aber vielleicht war das bei früheren Perl Versionen mal notwendig.

TomLee

Ok, Danke.

Ja, ohne dem split gehts.

Es ist also vom Listen/Skalaren Kontext abhängig, das ist das entscheidende was mir nicht kommen wollte.

Ich finde es ist hier gut beschrieben.

TomLee

Sry, kann jeder denken was er will, ich habs immer noch nicht verstanden und es beschäftigt mich weiterhin.

ZitatAlso bei $zeit Sun Jul 24 17:22:59 2022 und bei @zeit ein array mit 9 Werten. Das split kannst du weglassen.

split gibt doch auch ein Array zurück, warum ist es ein anderes wenn ich Pattern (am Leerzeichen trenne) angebe, wie wenn ich  localtime direkt einer Variablen (@) übergebe.

Im Listen-Kontext es auszudrücken ist doch hier zweideutig.

DetlefR

Ich erkläre mir das so.

Zitatlocaltime gibt das zurück was erwartet wird. Also bei $zeit Sun Jul 24 17:22:59 2022 und bei @zeit ein array mit 9 Werten.
Das split einen scalaren Wert erwartet, wird wohl localtime in diesem Falle "Sun Jul 24 17:22:59 2022" zurück geben.

passt{my @dt=split(" ",localtime(time));;my $string = join ', ', @dt;;return $string}