David Mously: Wundersame Wandlung eines Perl-Skripts...

Hallo allerseits,

ein bisher an sich sauber funktionierendes Perl-Script auf einer meiner
Seiten spinnt. Seit einigen Tagen gibt es statt einer gewuenschten Ergebnis-
Seite nur noch folgenden String aus:

SCALAR(0x8055e58)SCALAR(0x8055ec4)SCALAR(0x8055edc)SCALAR(0x8055ef4)SCALAR(0x8055f0c)SCALAR(0x8055f24)SCALAR(0x8055f3c)SCALAR(0x8055f54)SCALAR(0x8055f6c)SCALAR(0x8055f84)SCALAR(0x8055f9c)SCALAR(0x8055fb4)SCALAR(0x8055fcc)SCALAR(0x8055fe4)SCALAR(0x8050618)SCALAR(0x8050630)SCALAR(0x8050648)SCALAR(0x8050660)SCALAR(0x8050678)SCALAR(0x8050690)SCALAR(0x80506a8)SCALAR(0x80506c0)SCALAR(0x80506d8)SCALAR(0x80506f0)SCALAR(0x8050708)SCALAR(0x8050720)SCALAR(0x8063418)SCALAR(0x8050738)SCALAR(0x8050750)SCALAR(0x8063418)SCALAR(0x8050780)SCALAR(0x8050798)SCALAR(0x804de7c)SCALAR(0x805a40c)SCALAR(0x805a5a4)SCALAR(0x805a5a4)SCALAR(0x805a5a4)SCALAR(0x805a43c)SCALAR(0x805a538)SCALAR(0x80507d4)SCALAR(0x805a7cc)SCALAR(0x805a7e4)

nichts von alledem kommt - nach meinem bescheidenen Kenntnisstand -
irgendwie im Skript vor. Auch ein neues Aufspielen ins CGI-Verzeichnis
des Servers brachte keine Änderung.

Weiss jemand, was das bedeutet?
Hat möglicherweise mein Provider irgendetwas an seinem CGI-Interpreter
herumgeschraubt?
Oder empfange ich etwa geheime Signale aus dem Weltall?

???

MfG
David

PS: Live zu verfolgen ist das Ganze unter < http://www.mously.com>,
Abteilung "Rest-Of-Life-O-Matic".

  1. hi!

    ein bisher an sich sauber funktionierendes Perl-Script auf einer meiner
    Seiten spinnt. Seit einigen Tagen gibt es statt einer gewuenschten Ergebnis-
    Seite nur noch folgenden String aus:
    SCALAR(0x8055e58)...SCALAR(0x805a7e4)

    Das sind Referenzen auf Skalare. Erstellen lassen sie sich folgendermaßen:
      $referenz = $skalar;

    De-Referenzieren funktioniert so:
      $skalar = $$referenz;

    Wo also in deinem Skript eine Variable $var ausgegeben wird und obiges erscheint, müsstest du stattdessen
    $$var schreiben, um das Problem zu beseitigen.

    Alles weitere überlasse ich deiner Phanatasie ;)

    bye, Frank!

    1. Hallo Frank,

      SCALAR(0x8055e58)...SCALAR(0x805a7e4)

      vielen Dank fuer die schnelle Hilfe, noch dazu um diese Uhrzeit ;-)

      Wo also in deinem Skript eine Variable $var ausgegeben wird und
      obiges erscheint,

      Es erscheint NICHTS ANDERES mehr als obiges.

      müsstest du stattdessen
      $$var schreiben, um das Problem zu beseitigen.

      hmmm.

      Das dubiose ist aber, dass ich ABSOLUT NICHTS an dem Skript verändert
      habe, sprich: es nicht neu auf den Server geladen habe, bevor es
      anfing, den String auszugeben.

      Wenn ich deinen Tip richtig verstanden habe, soll ich also alle mit
      "$" definierten Variablen durch Variablen mit "$$" ersetzen?

      Alles weitere überlasse ich deiner Phanatasie ;)

      ...die, wie ich fürchte, in diesem Fall ein klein wenig eingeschränkt
      ist ;-)

      Mit ratlosen Grüssen
      David

      1. hi!

        SCALAR(0x8055e58)...SCALAR(0x805a7e4)
        vielen Dank fuer die schnelle Hilfe, noch dazu um diese Uhrzeit ;-)

        Hm, wieso? Was ist an der Uhrzeit so ungewöhnlich? ;))

        müsstest du stattdessen
        $$var schreiben, um das Problem zu beseitigen.
        Das dubiose ist aber, dass ich ABSOLUT NICHTS an dem Skript verändert
        habe, sprich: es nicht neu auf den Server geladen habe, bevor es
        anfing, den String auszugeben.

        Kann ich auch nicht verstehen. Irgendwas muss sich ja geändert haben, sonst würde das nicht passieren.

        Wenn ich deinen Tip richtig verstanden habe, soll ich also alle mit
        "$" definierten Variablen durch Variablen mit "$$" ersetzen?

        Wen in den referenzierten Variablen der richtige Inhalt steht, dann ja. Ansonsten dürfte dein Problem
        schwerwiegender sein, als ich hier angenommen habe :)

        Nochmal: Referenzen sind sowas ähnliches wie C-Pointer, nur machen sie weniger Probleme. Eine Referenz
        zeigt auf eine andere Variable:
          $ref = $var;  # $ref ist jetzt eine Referenz auf $var
          print $ref;  # liefert SCALAR(0x...)
          print $var; # liefert auch SCALAR(0x...)
          print $var;  # liefert Variableninhalt
          print $$ref; # liefert Variableninhalt (De-Referenzierung)

        Der Wert, der hinter SCALAR in Klammern steht ist eigentlich die Speicheradresse, an der der Wert der
        Variabeln steht. Für den Programmierer dürfte diese Adresse in Perl jedoch (fast) nie von Bedeutung sein.

        Alles weitere überlasse ich deiner Phanatasie ;)
        ...die, wie ich fürchte, in diesem Fall ein klein wenig eingeschränkt
        ist ;-)

        "perldoc perlref" ist dein Freund :)

        bye, Frank!

      2. Hi !

        Das dubiose ist aber, dass ich ABSOLUT NICHTS an dem Skript verändert
        habe, sprich: es nicht neu auf den Server geladen habe, bevor es
        anfing, den String auszugeben.

        Verwendest Du irgendwelche Module, evtl. welche, die noch eine 0.xx Versionsnummer haben? Da kann es schonmal passieren, dass sich das Interface aendert und die auf einmal was anderes zurueckgeben. Suche mal Deinen Source nach "use" und "require" Direktiven (meist ziemlich am Scriptanfang) ab.

        Wenn ich deinen Tip richtig verstanden habe, soll ich also alle mit
        "$" definierten Variablen durch Variablen mit "$$" ersetzen?

        Wer weiss. Vielleicht gibst Du ja auch irgendwo ein Array aus mit
            print @array;
        oder so. Dann waere wohl jedes der Elemente eine Referenz auf ein Skalar. In dem Fall muesstest Du etwas wie
            foreach $ref (@array) { print $$ref }
        schreiben. Aber wer weiss das schon ohne Sourcecode...

        So long