我有一组在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文件中提到的地方。)也就是说,我的ActivePerl安装也是如此。
我认为它出现在C:\strawberry\perl\site\lib\auto\APR\Request\Request.dll
中 - 为什么它不能在Strawberry下找到它,但可以在ActivePerl下找到它?
答案 0 :(得分: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"};
(出于某种原因,这似乎解决了这个问题。)
答案 1 :(得分: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()
之前进行了类型检查。
答案 2 :(得分:0)
在某个地方,您或其他人正在将字符串传递给期望对象的函数。调试的最佳第一步是加载Carp::Always,以便您可以获得回溯并找出实际发生的情况。