Hallo,
hab heute seit langem nochmal apptime verwendet und bekomme dazu folgende Meldungen im Log:
2016.11.23 19:59:56.081 1: PERL WARNING: Subroutine HandleTimeout redefined at ./FHEM/98_apptime.pm line 24.
2016.11.23 19:59:56.085 1: PERL WARNING: Subroutine CallFn redefined at ./FHEM/98_apptime.pm line 58.
2016.11.23 20:16:34.771 1: PERL WARNING: Use of uninitialized value in join or string at ./FHEM/98_apptime.pm line 150.
Wo liegt das Problem?
Danke
Die obersten 2 sind voll ok. Heißt nur das er die Subs bei eingelesen hat.
Bei der untersten ist eine nicht definierte Variable wo ein Wert Versucht wird ein zu lesen
Heißt, ich könnte über stacktrace versuchen das Problem rauszufinden!?
Brauchst du nicht. Zeile 150 in apptime gibt es wohl ein join
Tippen auf
my $bla = join(blabla
oder so. Melde es dem Entwickler und gut ist.
sollte behoben sein. Wenn nicht melde dich noch einmal
Mahlzeit!
Das Problem ist leider noch aktuell:
2017.02.20 20:43:56.415 1: PERL WARNING: Use of uninitialized value in join or string at ./FHEM/98_apptime.pm line 150.
2017.02.20 20:43:56.415 1: stacktrace:
2017.02.20 20:43:56.415 1: main::__ANON__ called by ./FHEM/98_apptime.pm (150)
2017.02.20 20:43:56.415 1: main::apptime_CommandDispTiming called by fhem.pl (1107)
2017.02.20 20:43:56.415 1: main::AnalyzeCommand called by fhem.pl (976)
2017.02.20 20:43:56.415 1: main::AnalyzeCommandChain called by ./FHEM/01_FHEMWEB.pm (2417)
2017.02.20 20:43:56.415 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (873)
2017.02.20 20:43:56.415 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (523)
2017.02.20 20:43:56.415 1: main::FW_Read called by ./FHEM/98_apptime.pm (104)
2017.02.20 20:43:56.415 1: main::apptime_getTiming called by ./FHEM/98_apptime.pm (74)
2017.02.20 20:43:56.415 1: main::CallFn called by fhem.pl (674)
# grep Id 98_apptime.pm
# $Id: 98_apptime.pm 12820 2016-12-18 15:22:37Z martinp876 $
Mal ins Blaue geschossen: Ist vielleicht ein Listenelement undef?
Patrick
Hallo Martin,
Vielleicht geht es so besser
144 +++ if (defined($h->{mAr}) && scalar(@{$h->{mAr}}) > 0){
Ist von Hand geschieben und ungetestet. Kannst Du das bitte einmal testen.
Grüße
Habe bei mir mal wie folgt geändert:
$arg = join ("; ", map { $_ // "(undef)" } @{$h->{mAr}});
Ich werde berichten.
Patrick
Was ich nicht verstehe aber auch nicht nachverfolgt habe ist, das in Zeile 144 ja schon geprüft wird ob die Liste einen Inhalt hat.
Guten Abend!
Zitat von: CoolTux am 20 Februar 2017, 21:18:17
Was ich nicht verstehe aber auch nicht nachverfolgt habe ist, das in Zeile 144 ja schon geprüft wird ob die Liste einen Inhalt hat.
Ich fürchte, der Check in 144 ist bereits vollständig, da $variable im Kontext von if (unter anderem) dann falsch wird, wenn $variable undef ist. Genauso wird scalar(@array) falsch wenn @array keine Elemente enthält. D. h. Martins Variante prüft sogar mehr als Deine.
Zitat
Truth and Falsehood
The number 0, the strings '0' and "" , the empty list () , and undef are all false in a boolean context. All other values are true. Negation of a true value by ! or not returns a special false value. When evaluated as a string it is treated as "" , but as a number, it is treated as 0. Most Perl operators that return true or false behave this way.
(http://perldoc.perl.org/perlsyn.html#Truth-and-Falsehood).
Patrick
Habe mal ein kleines Päckchen geschnürt: https://forum.fhem.de/index.php/topic,67909.0.html
Patrick