Prototype mismatch
Alexender
- cgi
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.
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.
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