gpt4 book ai didi

perl - 为什么这个定义的值不被识别为包或对象引用?

转载 作者:行者123 更新时间:2023-11-28 21:33:29 25 4
gpt4 key购买 nike

我有以下代码:

my $content = $response->decoded_content((charset => 'UTF-8'));
my $feed = XML::Feed->parse(\$content) || $logger->error("When retrieving $URL: ", XML::Feed->errstr);
if (defined $feed) {
for my $entry ($feed->entries) {
#DO SOMETHING
}
}

对于某些站点,XML::FEED 表示无法检测提要类型。这是我必须要看的东西,但这不是我现在的问题。此示例代码在一个 while 循环内,我正在检索不同的 RSS,我希望即使某些 URL 失败时脚本也能运行。

当我收到错误消息时,定义的函数似乎不起作用:

Can't call method "entries" without a package or object reference

谁能告诉我处理测试的正确方法是什么?

最佳答案

您首先必须检查 $feed 的值。

您描述的错误消息很明显:$feed 不是包/对象引用,但它可以是一个简单的哈希值。所以它被定义了。

在 if(defined) 前面添加我最喜欢的调试行:

warn Data::Dumper->new([ $feed ],[ '*feed' ])->Sortkeys(1)->Dump();use Data::Dumper;

你会以一种很好的方式看到它的值(value)。如果不进行测试,我会说 $feed 包含您的记录器的结果,它可能是 1 或 0 或类似的东西,因为您将 $feed 的值设置为 XML::Feed->parse,如果这不成功(未定义)它是 $logger->error 的结果。

最好这样写:

my $feed = XML::Feed->parse(\$content);

if (defined $feed) {
for my $entry ($feed->entries) {
#DO SOMETHING
}
}
else {
$logger->error("When retrieving $URL: ", XML::Feed->errstr);
}

因为据说 parse 会返回一个对象,我猜它会在出错时返回 undef。

关于perl - 为什么这个定义的值不被识别为包或对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com