(GELÖST) No such class bei perl arrays

Begonnen von jack_uf, 11 Januar 2023, 17:50:58

Vorheriges Thema - Nächstes Thema

jack_uf

Hallo

Ich habe seit neustem das Problem, dass ich folgenden perl Code nicht mehr ausführen kann:

my @stubeFenster=("a", "b");

Ich erhalte dann im Log folgende Fehlermeldung:
No such class stubeFenster at (eval 6811) line 5, near ";

  my stubeFenster"
syntax error at (eval 6811) line 5, near "my stubeFenster="

Ich habe keine Ahnung was ich da falsch mache. Zudem ist der Code in der Vergangenheit gelaufen. Ich weiss aber nicht was ich genau gemacht habe zwischen dem Zeitpunkt an dem es funktioniert hat und von da an, ab dann es nicht mehr funktioniert.
Gedanken: Ich habe vor einen paar Tag fhem seit langem wieder mal aktualisiert, den Raspberry pi habe ich aber erst vor kurzem neu gestartet. Das Problem tritt ca. seit da auf als ich ihn neu gestartet habe.

Weiss jemand was ich falsch mache, oder wie ich das Problem beheben kann?

Fhem hat aktuell die Revision: 22694 und läuft auf einem Raspberry pi

Besten Dank für die Hilfe.

Gruss
jack_uf

betateilchen

Ach da schau her - die Fehlerquelle steht doch schon in der Fehlermeldung...

near "my stubeFenster="

Wenn Du da tatsächlich ein array definieren möchtest, solltest Du halt auch das @ vor den Variablennamen schreiben  8)

my @stubeFenster=

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jack_uf

Hallo betateilchen

Besten Dank für Deine schnelle Antwort.
Das verwirrt mich eben noch zusätzlich im Code ist das @ drin
hier einen Auszug direkt aus dem fhem.cfg

\
  my @stubeFenster=("a", "b");;\


Das Log spricht fhem dann aber nicht mehr davon. Es scheit als würden die @ verschluckt.

betateilchen

Zeig doch mal den ganzen Code, ich glaube nur, was ich sehe...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jack_uf

sehr gerne  :)
Hier der echte Code. Es handelt sich hier um ein at.

+*00:10:00 {
  my @allFenster = ("FensterBad", "FensterDachzimmer", "FensterDachzimmerNord", "FensterElternZimmer", "FensterElternZimmerNord", "FensterSchlafzimmerOst", "FensterSpielzimmer", "FensterStube", "FensterSchlafzimmerSued", "FensterFirstkammer", "FensterElternZimmer", "FensterElternZimmerNord", "FensterKueche", "FensterTreppenhaus");
 
  foreach my $fenster (@allFenster){
    if(Value($fenster) eq "opened" or Value($fenster) eq "open"){
      fhem("set einFensterOffenLastState ".Value("einFensterOffen"));
      fhem("set einFensterOffen true");
      return 0;
    }
  }
  fhem("set einFensterOffen false");
  fhem("set einFensterOffenLastState false");
}


Im Log steht nun dies

Zitat
2023.01.12 06:26:31 1: ERROR evaluating {
  my allFenster = ("FensterBad", "FensterDachzimmer", "FensterDachzimmerNord", "FensterElternZimmer", "FensterElternZimmerNord", "FensterSchlafzimmerOst", "FensterSpielzimmer", "FensterSt$

  foreach my $fenster (allFenster){
    if(Value($fenster) eq "opened" or Value($fenster) eq "open"){
      fhem("set einFensterOffenLastState ".Value("einFensterOffen"));
      fhem("set einFensterOffen true");
      return 0;
    }
  }
  fhem("set einFensterOffen false");
  fhem("set einFensterOffenLastState false");
}: No such class allFenster at (eval 20554) line 2, near "{
  my allFenster"
syntax error at (eval 20554) line 2, near "my allFenster ="
Bareword "allFenster" not allowed while "strict subs" in use at (eval 20554) line 4.

Vielen Dank für Deine Bemühungen.

jack_uf

update wenn ich zwei @@ im Code hin mache, dann scheint es zu funktionieren. Hat sich da was geändert? Kann das sein?


{
  my @@allFenster = ("FensterBad", "FensterDachzimmer", "FensterDachzimmerNord", "FensterElternZimmer", "FensterElternZimmerNord", "FensterSchlafzimmerOst", "FensterSpielzimmer", "FensterStube", "FensterSchlafzimmerSued", "FensterFirstkammer", "FensterElternZimmer", "FensterElternZimmerNord", "FensterKueche", "FensterTreppenhaus");
 
  foreach my $fenster (@@allFenster){
    if(Value($fenster) eq "opened" or Value($fenster) eq "open"){
      fhem("set einFensterOffenLastState ".Value("einFensterOffen"));
      fhem("set einFensterOffen true");
      return 0;
    }
  }
  fhem("set einFensterOffen false");
  fhem("set einFensterOffenLastState false");
}

betateilchen

Zitat von: jack_uf am 12 Januar 2023, 08:07:44
update wenn ich zwei @@ im Code hin mache, dann scheint es zu funktionieren.

Bearbeitest Du die fhem.cfg in einem externen Editor, anstatt die Frontend-Funktion "Edit files" dafür zu verwenden?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Wenn es irgendwas damit zu tun hat wie die fhem.cfg bearbeitet wird, dann sollte doch in der Kommandozeile

{my @stubeFenster=("a", "b");;return  $stubeFenster[0]}

ausgeführt, nicht zu der Meldung führen ? Ist das so ?

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Hast dich jetzt mal schnell an jack_ufs System gebeamt und selbst ausprobiert, das du die Antwort geben kannst ?

betateilchen

Nein, ich wollte einfach den von Dir mit Deiner völlig sinnlosen Frage begonnenen Holzweg hier im Thread möglichst schnell wieder beenden.

Außerdem hattest Du nicht dazugeschrieben, WEM Du die Frage stellst.

Zitat von: TomLee am 12 Januar 2023, 10:48:52
Wenn es irgendwas damit zu tun hat wie die fhem.cfg bearbeitet wird, dann sollte doch in der Kommandozeile
...
ausgeführt, nicht zu der Meldung führen ? Ist das so ?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Die Antwort auf meine sinnlose Frage würde einfach deine Vermutung bestätigen.

Wenn du im Hintergrund die fhem.cfg schon so bearbeitet hast das du die Meldung nachvollziehen kannst ist ja gut.

Ich habe hiermit fertig und sag nix mehr, spar dir bitte einen weiteren Kommentar.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jack_uf

Zu Eurer Frage wie ich den das fhem.cfg bearbeite: Ich mache dies über den Browser (Firefox). Also nicht mit einem Editor.

Ich habe jetzt alle Arrays von @eineVariable auf @@eineVariable umgestellt und so wie es aussieht funktioniert nun alles wieder bei mir. Warum das so bei mir ist weiss ich nicht.

Ich Danke Euch für Eure Unterstützung

TomLee

ZitatGedanken: Ich habe vor einen paar Tag fhem seit langem wieder mal aktualisiert, den Raspberry pi habe ich aber erst vor kurzem neu gestartet. Das Problem tritt ca. seit da auf als ich ihn neu gestartet habe.

Weiss jemand was ich falsch mache, oder wie ich das Problem beheben kann?

Fhem hat aktuell die Revision: 22694 und läuft auf einem Raspberry pi

Unabhängig vom geschilderten Problem, irgendwas muss bei deinem update-Vorgang schief gelaufen sein, Revision 22694 bezieht sich auf eine Änderung der mqtt2.template-Datei im Jahr 2020.