Perl Division erzeugt Fehler, Hilfe für sub

Begonnen von franky08, 20 August 2014, 20:35:19

Vorheriges Thema - Nächstes Thema

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

#3
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:


  • Du rufst die Funktion mit {diff(undef)} auf
  • Du änderst die Definition der Funktion in sub diff()

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Das Dollarzeichen!!! Ich hab den Hinweis gerade im Handbuch gefunden, ich Trottel.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#5
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);

}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

wenn Du mir jetzt noch erklärst, was dieser Unfug hier soll:

my ($x3) = @_;

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

franky08

#7
@betateilchen
my ($x3) = @_;
Das stand noch von einem Test mit einem Array drinn.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1