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
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.
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
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.
#!/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
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";
:)
VG
Frank