Variableninhalte gehen verloren

bitmuncher

Senior-Nerd
Ich hab hier gerade ein recht seltsames Problem mit einem Perl/CGI-Skript. Situation ist folgende... Das Skript loest zuerstmal eine ID anhand der User-ID auf:

Code:
sub char_info
{
    ...
    my $char_id = &char_id($user_id);

und nutzt diese im weiteren Verlauf als Parameter fuer einige Funktionen...

Code:
    # charakter-namen aufloesen
    my $char_name = &char_name($char_id);
    # attribute holen
    my %char_attrs = &char_attr($char_id);

Bis zu diesem Punkt stellt das auch soweit kein Problem dar und funktioniert, aber seltsamerweise ist der Inhalt von $char_id danach ploetzlich verschwunden. Beim folgenden Aufruf von

Code:
    my %char_skills = &char_skills($char_id);

scheint $char_id leer zu sein, denn bei char_skills() kommt $char_id nie an.

Code:
sub char_skills
{
    my ($char) = @_;
    ...
    print "char: $char\n";
...

Das mal testweise auf der Konsole aufgerufen ergibt, dass $char offenbar leer ist. Wo ist der Inhalt der Variablen ploetzlich hin? Hat jemand eine Idee, was ich hier uebersehe?
 
Ich hatte bisher nicht das Vergnügen, mit Perl zu arbeiten, aber dennoch eine Idee;
Kann es sein, dass $char_id von char_name() oder char_attr() als eine Art Referenz / Zeiger behandelt wird, so dass der Inhalt (vll. fälschlicher Weise) überschrieben wird?
 
Versuch mal durch (massenhaft) Debugausgaben herauszufinden, wann die ID gelöscht wird.

Ich würde auch auf das von little_Newbie beschriebene Problem tippen.

Versuch also mal die "böse" Funktion zu isolieren, und paste mal die Funktion oder schau selber ob du dort einen Fehler findest.
 
Das konnte ja nicht das Problem sein, da saemtliche Funktionen den Inhalt von $char_id in eine eigene Variable kopieren und dort damit weiterarbeiten (my $char = @_).Mittlerweile hab ich das Problem aber geloest. Als CGI verhaelt sich Perl offenbar etwas anders als auf der Konsole. Debug-Prints haben daher nichts geholfen, denn diese behaupteten, das $char_id nichtmal bei char_name() ankommt, was aber nicht sein konnte, da die Funktion den gewuenschten Wert zurueck gibt. Im Endeffekt war's dann ein Tipp-Fehler in char_attr(), der die Probleme verursacht hat. Rausgekommen ist das erst, als ich die Rueckgabe der Funktionen mal auf ein Scalar gesetzt hatte anstatt einem Hash und mir alle moeglichen Variablen zurueckgeben lassen hab, so dass ich sie direkt in der Seite ausgeben lassen konnte. Trotzdem danke fuers mitdenken. :)
 
Zurück
Oben