FHEM Forum

FHEM => Sonstiges => Thema gestartet von: franky08 am 18 Januar 2017, 15:40:50

Titel: Finde Fehler in Sub nicht
Beitrag von: franky08 am 18 Januar 2017, 15:40:50
Hallo, habe zwar schon einige Sachen in sub`s gepackt aber hier komme ich iMo nicht weiter oder sehe den Fehler einfach nicht. Bei anderen sub`s rufe ich mit {name der aufzurufenden sub} diese auf, das funktioniert fehlerfrei und bringt keinen Fehler. Bei dieser hier sitze ich schon eine Weile:
Bareword "Aussen1" not allowed while "strict subs" in use at ./FHEM/99_myHeizungUtils.pm line 27.

Warum, an anderer Stelle funktioniert das trotz strict subs. Hier das Stück was mir Probleme macht:

my $thtc = ($th+$tc)*0.5;
my $stell = ($soll-$thtc);

if ($ta > 8.0) {
{Aussen1}
};
if ($ta < 8.0 && $ta >= 4.0) {
{Aussen2}
};
if ($ta <= 3.99 && $ta >=0) {
{Aussen3}
};
if ($ta < 0 && $ta >= -3.0) {
{Aussen4}
};
if ($ta < -2.99 && $ta >= -6.0) {
{Aussen5}
};
if ($ta < -6.0) {
{Aussen6}
};


Da sind jetzt mit Sicherheit ein paar {} zuviel drin, die stammen von meiner verzweifelnden Fehlersuche  :o

VG
Frank
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: betateilchen am 18 Januar 2017, 15:49:47
Um den Aufruf einer Funktion aus perl Code gehört eigentlich keine geschweifte Klammer (ausser in Bedingungsblöcken). Und schon gar nicht zwei.

Eigentlich steht da nämlich:


if ($ta > 8.0) { {Aussen1} };


Durch die doppelten geschweiften Klammern versucht perl, "Aussen1" zu evaluieren.

Unter der Voraussetzung, dass "Aussen1" bis "Aussen6" eigene Funktionen sind, könnte es so aussehen:



my $thtc = ($th+$tc)*0.5;
my $stell = ($soll-$thtc);

Aussen1() if ($ta > 8.0);
Aussen2() if ($ta >= 4.0 && $ta < 8 );
Aussen3() if ($ta >=0 && $ta <= 3.99);
Aussen4() if ($ta < 0 && $ta >= -3.0);
Aussen5() if ($ta < -2.99 && $ta >= -6.0);
Aussen6() if ($ta < -6.0);



Falls das nicht funktioniert, solltest Du bitte erklären, was Aussen1-6 ist.
Deine Falltunterscheidung versagt übrigens bei den Temperaturen -3.0 und -6.0° komplett.
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: franky08 am 18 Januar 2017, 16:30:13
Danke betateilchen, inzwischen habe ich auch gefunden warum das an anderer Stelle funktioniert (dort steht der Aufruf innerhalb eines fhem "set ...... ; {sub}"; oder in einem Bedingungsblock.

ZitatDeine Falltunterscheidung versagt übrigens bei den Temperaturen -3.0 und -6.0° komplett

das mus ich mir noch einmal ansehen, kann sein das ich mich mit den Vergleichsoperatoren vertan habe

Vielen Dank

Frank
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: betateilchen am 18 Januar 2017, 21:50:36
Zitat von: franky08 am 18 Januar 2017, 16:30:13
das mus ich mir noch einmal ansehen, kann sein das ich mich mit den Vergleichsoperatoren vertan habe

Tipp: -3 ist sowohl "kleiner -2,99" als auch "größer oder gleich -3"

Es würde also bei -3  Aussen4 UND Aussen5 aufgerufen.
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: CoolTux am 18 Januar 2017, 22:21:12

#!/usr/bin/perl

package main;
use strict;
use warnings;


my $a = -3;
my $b;

$b=1 if ($a > 8.0);
$b=2 if ($a >= 4.0 && $a < 8 );
$b=3 if ($a >=0 && $a <= 3.99);
$b=4 if ($a < 0 && $a >= -3.0);
$b=5 if ($a < -2.99 && $a >= -6.0);
$b=6 if ($a < -6.0);

printf "\n$b\n";


geht super
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: CoolTux am 18 Januar 2017, 22:44:45
Habe mist gebaut. Udo hat Recht


#!/usr/bin/perl

package main;
use strict;
use warnings;


my $a = -3;
my $b;

$b .=1 if ($a > 8.0);
$b .=2 if ($a >= 4.0 && $a < 8 );
$b .=3 if ($a >=0 && $a <= 3.99);
$b .=4 if ($a < 0 && $a >= -3.0);
$b .=5 if ($a < -2.99 && $a >= -6.0);
$b .=6 if ($a < -6.0);

printf "\n$b\n";
Titel: Antw:Finde Fehler in Sub nicht
Beitrag von: franky08 am 18 Januar 2017, 23:15:19
 :)
VG
Frank