草莓Perl和mod_perl2下的奇怪的Apache2 :: Cookie错误

时间:2010-11-09 22:21:50

标签: perl cookies apache2 mod-perl2 strawberry-perl

我有一组在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下找到它?

3 个答案:

答案 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,以便您可以获得回溯并找出实际发生的情况。