Hallo zusammen,
eigentlich dachte ich, mittlerweile hätte ich es im Großen und Ganzen verstanden. Jetzt wollte ich gerade nur in einem Notify noch einen Perlteil hinzufügen und bekomme den typischen Global-Symbol-Fehler , obwohl ich meine Variable mit my deklariert habe.
Kann mir jemand helfen? Danke!
Fehlermeldung:
syntax error at (eval 110361) line 3, near "(."
Global symbol "$rufname" requires explicit package name at (eval 110361) line 4.
Code:
FritzBoxAnruf:missed_call:.* setreading Dialog_AnrufZuHause LetztesEvent $EVENT;attr Dialog_AnrufZuHause dialog_Rufnummer $EVTPART1; attr Dialog_AnrufZuHause dialog_Name $EVTPART2;
{
my $rufname = $EVENT =~ \((.*)\);
fhem("attr Dialog_AnrufZuHause dialog_Name ".$rufname);
};
sleep 2; set Dialog_AnrufZuHause say VerpassterAnruf
Zitat von: jazzor am 28 Mai 2018, 12:28:12
Hallo zusammen,
eigentlich dachte ich, mittlerweile hätte ich es im Großen und Ganzen verstanden. Jetzt wollte ich gerade nur in einem Notify noch einen Perlteil hinzufügen und bekomme den typischen Global-Symbol-Fehler , obwohl ich meine Variable mit my deklariert habe.
Kann mir jemand helfen? Danke!
Fehlermeldung:
syntax error at (eval 110361) line 3, near "(."
Global symbol "$rufname" requires explicit package name at (eval 110361) line 4.
Code:
FritzBoxAnruf:missed_call:.* setreading Dialog_AnrufZuHause LetztesEvent $EVENT;attr Dialog_AnrufZuHause dialog_Rufnummer $EVTPART1; attr Dialog_AnrufZuHause dialog_Name $EVTPART2;
{
my $rufname = $EVENT =~ \((.*)\);
fhem("attr Dialog_AnrufZuHause dialog_Name ".$rufname);
};
sleep 2; set Dialog_AnrufZuHause say VerpassterAnruf
Wenn der RegEx nicht aufgelöst wird ist $rufname undefiniert. Besser:
{
if($EVENT =~ \((.*)\)) {
fhem("attr Dialog_AnrufZuHause dialog_Name ".$1);
} else {
fhem("attr Dialog_AnrufZuHause dialog_Name "."Not found");
};
Grüße Jörg
Gesendet von iPad mit Tapatalk
Zitat von: JoWiemann am 28 Mai 2018, 13:24:29
Wenn der RegEx nicht aufgelöst wird ist $rufname undefiniert.
Danke für den Tipp. Mit der Ausnahmebehandlung tu ich mich tatsächlich im Allgemeinen noch schwer. :-)
Allerdings scheint das hier nicht der Grund für den Fehler gewesen zu sein. Ich bekomme den Global-Symbol-Fehler ja schon beim Editieren des Notify.
Hast du da noch eine Idee?
Ah, sehe ich jetzt. Auf dem SmartPhone habe ich nur die Perl Ebene {} gesehen.
Du mischt direkte Fhem Kommandos mit der Perl {} Ebene. Das geht so nicht. Hier gilt entweder ... oder ...
Versuche mal:
{fhem("setreading Dialog_AnrufZuHause LetztesEvent $EVENT");
fhem("attr Dialog_AnrufZuHause dialog_Rufnummer $EVTPART1);
fhem("attr Dialog_AnrufZuHause dialog_Name $EVTPART2);
if($EVENT =~ \((.*)\)) {
fhem("attr Dialog_AnrufZuHause dialog_Name ".$1);
} else {
fhem("attr Dialog_AnrufZuHause dialog_Name "."Not found");
}
# sleep 2;
fhem(set Dialog_AnrufZuHause say VerpassterAnruf);
}
Grüße Jörg
PS: Nicht getestet
Danke, das war der entscheidende Hinweis. :-)
Ich dachte, ich hätte das schon mal so gemacht, aber dann hab ich mich da wohl geirrt.
Fürs Protokoll, nun der funktionierende Code:
FritzBoxAnruf:missed_call:.* {
fhem("setreading Dialog_AnrufZuHause LetztesEvent $EVENT");
fhem("attr Dialog_AnrufZuHause dialog_Rufnummer ".$EVTPART1);
fhem("attr Dialog_AnrufZuHause dialog_Name ".$EVTPART2);
if($EVENT =~ '\((.*)\)' ){
fhem("attr Dialog_AnrufZuHause dialog_Name ".$1);
} else {
fhem("attr Dialog_AnrufZuHause dialog_Name "."Not found");
}
# sleep 2;
fhem("set Dialog_AnrufZuHause say VerpassterAnruf");
}