PERL WARNING: substr outside of string im Doif

Begonnen von Kai-Alfonso, 08 Januar 2019, 09:22:54

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Hallo,

ich vermute, es ist eher eine Perl statt eine Doif Frage, aber da es in einem Doif vorkommt, stelle ich die Frage hier:

Ich habe folgendes im Ausführungsteil:

({use strict;;use Date::Calc qw(Delta_Days);;
my $start_datum = ReadingsVal("doif_Stromkosten1","Start_Abrechnungsperiode","");;
my $tag = substr($start_datum, 0, 2);;
my $monat = substr($start_datum, 3, 2);;
my $jahr = substr($start_datum, 6, 4);;
my ($day,$month,$year) = (localtime)[3,4,5];;

my $year1 = sprintf '%04d',$year+1900;;
my $month1 = sprintf '%02d',$month+1;;

if ($month1 == 12 ) {
$jahr  = $year1;
}
else {
$jahr  = $year1 - 1;
}

my $day1 = sprintf '%02d',$day;;
my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$year1,$month1,$day1);;
fhem ("setreading doif_Stromkosten1 Tage $anzahl_tage")
})


Ich nehme das, um die Anzahl der Tage von einem Stichtag bis Heute zu berechnen.

Das funktioniert soweit, allerdings bekomme ich im Fhem Log immer Perl Warnungen

PERL WARNING: substr outside of string at (eval 63424) line 1.

Mein Perlverständnis ist zu schlecht, um das zu debuggen. Vielleicht hat jemand eine Ahnung?
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Ellert

Du versuchst eine Teilzeichenkette auszulesen deren Grenzen ausserhalb der Zeichenkette liegen.
Debug: Ändere die Parameter auf gültige Werte, oder stelle sicher, dass die Zeichenkette lang genug ist, https://perldoc.perl.org/functions/substr.html

Kai-Alfonso

Zitat von: Ellert am 08 Januar 2019, 10:50:41
Du versuchst eine Teilzeichenkette auszulesen deren Grenzen ausserhalb der Zeichenkette liegen.
Debug: Ändere die Parameter auf gültige Werte, oder stelle sicher, dass die Zeichenkette lang genug ist, https://perldoc.perl.org/functions/substr.html

Hi Ellert,

äh ja - dummer Fehler von mir und ich hätte selber drauf kommen können:

my $jahr = substr($start_datum, 6, 4);;

hat mal funktioniert, als ich das Reading mit 01.12.2018 abgespeichert hatte.

Jetzt benutze ich aber nur noch Tag und Monat brauche die Jahresangabe nicht mehr.  Dann ist klar, das bei 01.12. der substr nicht mehr innerhalb der Zeichenkette ist.

Danke fürs Schubsen von der Leitung  8) 8) 8)
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)