Undefined subroutine &main::cam_out called at (eval 406) line 1.

Begonnen von eddie1104, 28 Oktober 2016, 13:32:28

Vorheriges Thema - Nächstes Thema

eddie1104

Ich habe folgende Funktion in 99_myUtils.pm geschrieben:

sub
listen_out
{
    my $web = "http://xxxx:yyyyyyyy\@192.168.x.xxxxxx:zzzz/FHEM/fhem_listen.php";
    my $FW_httpheader;
    my $host = $FW_httpheader{Host};

    my $quelltext = "";

    use LWP::Simple;

    $host = substr $host,0,12;
 
    my $ret = '<table class="weather">';

    $quelltext = get $web or die "Couldn't get $web";

    if ($host ne "192.168.x.xx")
    {
        $quelltext =~ s/192.168.x.xx/xxxx.dyndns.org/g;
        $quelltext =~ s/192.168.x.xy/xxxx.dyndns.org/g;
        $quelltext =~ s/192.168.x.xz/xxxx.dyndns.org/g;
        $quelltext =~ s/192.168.x.yy/xxxx.dyndns.org/g;
    }

    if (!$quelltext)
    {
        $quelltext = $web;
    }

    $ret = $ret . '<tr><td>' . $quelltext . '</td></tr>';
    $ret = $ret . '</table>';

    return $ret;   
}


Nach shutdown restart erhalte ich immer die Fehlermeldung "Undefined subroutine &main::cam_out called at (eval 406) line 1. " Wenn ich jetzt 99_myUtils.pm einmal lade und ungeändert wieder abspeichere, dann funktionier die Funktion einwandfrei.

Hat irgend jemand eine Idee was das sein könnte?

eddie1104

Oups, die Fehlermeldung bezieht sich auf eine weitere Funktion cam_out, die nach dem gleichen Muster aufgebaut ist. Beide Funktionen produzieren die gleiche Fehlermeldung.

eddie1104

ich habe im Logbuch die folgende Fehlermeldung gefunden:


reload: Error:Modul 99_myUtils deactivated:
Global symbol "%FW_httpheader" requires explicit package name at ./FHEM/99_myUtils.pm line 4027, <$fh> line 6.
BEGIN not safe after errors--compilation aborted at ./FHEM/99_myUtils.pm line 4042, <$fh> line 6.


Beim Googlen habe ich herausbekommen, dass eine solche Meldung kommt, wenn eine Variable nicht definiert ist. Aber $FW_httpheader ist doch global definiert???

justme1968

#3
die variable ist zwar global, aber erst dann bekannt wenn das modul das sie einführt sie das erste mal verwendet hat. also nach dem fhemweb geladen ist und die erste seite ausgeliefert hat. wenn du sie vorher verwendest gibt es einen fehler.

du kannst sie am anfang deines moduls mit use vars qw(%FW_httpheader); machen. dann passt alles.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

eddie1104

Hallo Andre,

ich habe das wahlweise am Anfang von 99_myUtils und am Anfang der Funktion gesetzt.  Beides bringt keinen Erfolg. Das Verhalten bleibt identisch.

justme1968

sorry. hatte die falsche zeile kopiert. ist oben korrigiert.

es gibt ein FW_httpheader array und ein FW_httpheader hash. du musst das deklarieren das du auch verwendest.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

eddie1104

OK funzt ! Freu !
Ich denke, es wird noch eine Zeitlang dauern, bis ich mit Perl und FHEM mal so einigermaßen auf Du bin. Glücklicherweise gibt es ja dieses Forum. Ich danke Dir jedenfalls erst mal recht herzlich.