Alexender: Prototype mismatch

Hallo bei einem CGI Script wird in Server Errorlog dauernd folgende Meldung reingeschrieben:

Prototype mismatch: sub main::head vs ($) at ../..//path/file.cgi line 22

In dem CGI Script steht auf dem Platz folgendes:

use LWP::Simple;

Kann mir jemand helfen und sagen, wie ich den Fehler los werde?

Gruss Alex.

  1. Hallo,

    ich habe noch im Internet (Google) irgendwo gelesen, dass man in diesem Fall

    use LWP::Simple;

    mit

    use CGI 'param';

    ersetzen kann, doch dann gibt es einen anderen Fehler in einer folgenden Zeile:

    $link1=get("http://www.url.de/ads/file.php?id=9");

    Der Fehler sieht folgendermaßen aus:

    Undefined subroutine &main::get called at ......

    Bin für eure Hilfe dankbar.
    Gruss Alex.

    1. Tag Alexender.

      ich habe noch im Internet (Google) irgendwo gelesen, dass man in diesem Fall use LWP::Simple; mit use CGI 'param'; ersetzen kann, doch dann gibt es einen anderen Fehler in einer folgenden Zeile: [...]

      Der Ansatz ist schon der richtige. Dein Fehler lautete:

      Prototype mismatch: sub main::head vs ($) at ../..//path/file.cgi line 22

      Beide Module (CGI und LWP::Simple) stellen eine Methode head zur Verfügung, welche aus welchem Modul du brauchst, musst du wissen. Anhand deines letzten Fehlers vermute ich allerdings, dass du aus LWP::Simple nur die Methode get() brauchst, nicht aber head(), also binde auch nur die benötigte Methode ein:

      use LWP::Simple qw/get/;

      Ansonsten kannst du das Einbinden der nicht benötigten head-Methode auch so unterbinden (dann stehen dir alle Methoden von LWP::Simple zur Verfügung außer head):

      use LWP::Simple qw/!head/;

      Das Gleiche könnte man mit dem CGI-Modul machen. Wenn du ausschließlich die Methode param brauchst, um die Parameter zu parsen, mit denen dein Script aufgerufen wurde, dann schreibe es auch so:

      use CGI qw/param/;

      Du musst dann auch kein neues CGI-Objekt erzeugen, du kannst die Methode param direkt wie eine normale sub aufrufen, musst allerdings beachten, dass dann alle anderen Funktionalitäten des CGI-Moduls nicht verfügbar sein werden. Übrigens sollte man m.E. vom CGI-Modul immer nur das einbinden, was man tatsächlich braucht, Hinweise dazu findest du in der Dokumentation zu CGI.pm.

      [dsf 3.6]
      Siechfred

      --
      »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«