FHEM Forum

FHEM => Sonstiges => Thema gestartet von: franky08 am 20 August 2014, 20:35:19

Titel: Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: franky08 am 20 August 2014, 20:35:19
Hallo, ich versuche 2 Temperaturen zu dividieren aber leider erzeugt der Code einen Fehler. Leider finde ich meinen Fehler nicht und in meinem Perl Handbuch finde ich dazu auch keinen erklärenden Hinweis. Die sub ist folgendermaßen:

sub diff($)
{
my ($diff) = @_;

my $x1 = ReadingsVal("Diff_Sensor_WZ_T2","temperature","99" );
my $x2 = ReadingsVal("Diff_Sensor_WZ_T1","temperature","99" );
my $x3 = int($x1/$x2);
return ($x3);

}


Die Fehlermeldung:
Not enough arguments for main::diff at (eval 1170140) line 1, at EOF

Nur weis ich nicht, warum nicht genug Argumente vorhanden sind.

Kann mir bitte jemand weiterhelfen?
VG
Frank
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: betateilchen am 20 August 2014, 20:50:54
Der Fehler passiert nicht in Deiner Funktion, sondern bei ihrer Verwendung. Wie rufst Du denn die Funktion auf?

Du ordnest in der Funktionen einen Wert an die Variable $diff zu, den Du in der gesamten Funktion gar nicht verwendest. Du musst ihn aber beim Aufruf trotzdem übergeben.
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: franky08 am 20 August 2014, 21:27:19
Hallo betateilchen, die Fehlermeldung bekomme ich, wenn ich zum testen in der Kommandozeile die sub mit {diff} aufrufe.
my ($diff) = @_;
ist natürlich Blödsinn, da der Name der sub ja auch diff ist. Habe das jetzt korrigiert aber leider bekomme ich immer noch einen Fehler, ich möchte gerne verstehen warum.
sub neu:
sub diff($)
{
my ($x3) = @_;

my $x1 = ReadingsVal("Diff_Sensor_WZ_T2","temperature","99" );
my $x2 = ReadingsVal("Diff_Sensor_WZ_T1","temperature","99" );
my $x3 = int($x1/$x2);

return ($x3);

}


VG
Frank
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: betateilchen am 20 August 2014, 21:35:47
perl Grundlagen, Kapitel 1, Satz 1:

sub diff($)

Das Dollarzeichen in der Klammer bedeutet, beim Aufruf der Funktion diff() muss ein Parameter übergeben werden.

Du hast nun (mindestens) zwei Möglichkeiten, Dein Problem zu lösen:


Beides wird das gleiche Ergebnis liefern und es wird keine Fehlermeldung (hey, eine Fehlermeldung sollte man zumindest LESEN und interpretieren können!) mehr kommen.

Eine Variable darf übrigens problemlos den gleichen Namen haben wie die Funktion, in der sie definiert wird.
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: franky08 am 20 August 2014, 21:39:54
Das Dollarzeichen!!! Ich hab den Hinweis gerade im Handbuch gefunden, ich Trottel.
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: franky08 am 20 August 2014, 21:48:27
Mein Gott, jetzt hab ich´s:

sub diff()
{
my $x1 = ReadingsVal("Diff_Sensor_WZ_T2","temperature","99" );
my $x2 = ReadingsVal("Diff_Sensor_WZ_T1","temperature","99" );
my $x3 = ($x1/$x2);
my $x4 = int(100 * $x3 + 0.5) / 100;

return ($x4);

}
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: betateilchen am 21 August 2014, 09:50:48
wenn Du mir jetzt noch erklärst, was dieser Unfug hier soll:

my ($x3) = @_;

dann hab ichs vielleicht auch irgendwann...
Titel: Antw:Perl Division erzeugt Fehler, Hilfe für sub
Beitrag von: franky08 am 21 August 2014, 20:10:50
@betateilchen
my ($x3) = @_;
Das stand noch von einem Test mit einem Array drinn.