Frage

Ich habe eine Reihe von Skripten, die unter ActivePerl 5.10 laufen. Doch unter Strawberry Perl 5.10, ich eine seltsame Fehlermeldung:

Can't locate object method "cookie_class" via package "MyCookie" (perhaps you forgot to load "MyCookie"?) at C:/strawberry/perl/site/lib/Apache2/Cookie.pm line 41.

Allerdings MyCookie ist der Name des Cookies selbst, nicht Perl-Paket.

Wenn ich kommentieren Sie Zeile 41 von Cookie.pm, das Skript ausgeführt wird, aber ich kann nicht erfolgreich erhalten oder Set Cookies mehr.

Die Fehlermeldung in etwas richtig scheint, dass ich nicht cookie_class finden kann entweder (außer wenn es in den POD-Dateien erwähnt wird.) Sagte, dass das gleiche für meine ActivePerl Installation wahr ist.

Ich denke, es ist in C:\strawberry\perl\site\lib\auto\APR\Request\Request.dll - wie kommt es nicht unter Erdbeere findet, kann aber unter ActivePerl

?
War es hilfreich?

Lösung

Ändern Sie den Code der 2.X Schema verwenden wie folgt:

my $j = Apache2::Cookie::Jar->new($r);
my $cookie = $j->cookies("MyCookie"); # works!  go figure...

Anstatt die alte Methode:

local our %cookies = Apache2::Cookie->fetch($r); # error was happening here
local our $cookie = $cookies{"MyCookie"};

(Aus irgendeinem Grund schien es zu beheben.)

Andere Tipps

Mischen Sie möglicherweise den apreq DLLs zwischen den Erdbeer- und ActivePerl Versionen? Oder Mischen apreq-1 und apreq-2 DLLs irgendwie?

Der Bereich um den cookie_class Anruf zu beleidigen ist gerade dies:

my $jar = $req->jar or return;
$jar->cookie_class(__PACKAGE__);
return $jar->get(shift) if @_;

Die cookie_class Methode kommt aus Request.dll und $req ist Typ geprüft, bevor jar() aufgerufen wird.

Irgendwo, Sie oder jemand anderes eine Zeichenfolge an eine Funktion ist vorbei, die ein Objekt erwartet. Ihr bester erster Schritt bei der Fehlersuche wäre zu laden Carp :: Immer , so dass Sie bekommt einen Backtrace und herausfinden, was wirklich passiert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top