0

ActivePerl 5.10 で実行される一連のスクリプトがあります。ただし、Strawberry Perl 5.10 では、奇妙なエラー メッセージが表示されます。

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.

ただし、MyCookieこれは Cookie 自体の名前であり、Perl パッケージではありません。

Cookie.pm の 41 行目をコメント アウトすると、スクリプトは実行されますが、Cookie を正常に取得または設定できなくなります。

どちらも見つからないという点で、エラーメッセージは多少正しいようですcookie_class(POD ファイルで言及されている場所を除く)。

入っていると思いますC:\strawberry\perl\site\lib\auto\APR\Request\Request.dllが、Strawberry では見つからないのに、ActivePerl では見つかるのはなぜですか?

4

3 に答える 3

2

次のように 2.X スキームを使用するようにコードを変更します。

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

古い方法ではなく:

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

(なぜかこれで直ったようです。)

于 2010-11-10T02:59:46.370 に答える
1

Strawberry と ActivePerl のバージョン間で apreq DLL を混在させている可能性がありますか? それとも apreq-1 と apreq-2 の DLL を何らかの形で混在させていますか?

cookie_class問題のある呼び出しの周りの領域は次のとおりです。

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

cookie_classメソッドはから来てRequest.dll、呼び出される$req前に型チェックされます。jar()

于 2010-11-09T23:42:05.037 に答える
0

どこかで、あなたまたは他の誰かが、オブジェクトを期待する関数に文字列を渡しています。デバッグの最初の最善のステップは、Carp::Alwaysをロードして、バックトレースを取得し、実際に何が起こっているかを調べることです。

于 2010-11-09T23:04:01.523 に答える