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 文件中提到的地方)。也就是说,我的 ActivePerl 安装也是如此。

我想是在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 回答