perl syntax im notify [gelöst]

Begonnen von jazzor, 28 Mai 2018, 12:28:12

Vorheriges Thema - Nächstes Thema

jazzor

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

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

jazzor

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?

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

jazzor

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");
}