【问题标题】:Perl MozRepl cleanup problemPerl MozRepl 清理问题
【发布时间】:2010-10-27 16:32:01
【问题描述】:

我正在编写一个网络爬虫,我一直在使用 WWW::Mechanize::Firefox 来导航一些页面(对于其他我使用 WWW::Mechanize),这些页面在页面加载后会继续加载内容,我已经从来没有遇到过这样的问题。

昨天我在脚本中添加了 DBI 和 DBD::mysql,添加了将数据导出到数据库的查询(这非常有效),但突然 MozRepl 开始出现此错误:

(in cleanup) Can't call method "execute" on an undefined value at /Library/Perl/5.10.0/MozRepl.pm line 372 during global destruction.
(in cleanup) Can't call method "execute" on an undefined value at /Library/Perl/5.10.0/MozRepl.pm line 372 during global destruction.

并在 1 个周期后终止脚本(它应该一直运行到到达特定文本文件的末尾,但它不会)。

我没有触及这部分脚本的任何内容(不需要在这些页面上使用数据库),至少是自愿的。我检查了一个文件比较应用程序,但无法解决任何问题。

发布代码可能很棘手,它很长,我不知道问题出在哪里。

编辑

有时它也会给出这个错误而不是前一个错误:

(in cleanup) Can't call method "cmd" on an undefined value at /Library/Perl/5.10.0/MozRepl/Client.pm line 186 during global destruction.

【问题讨论】:

  • MozRepl.pm 来自哪里?这是你写的吗?
  • @brian:一点也不。我相信它是与 Mechanize::Firefox 一起安装的,因为它用于通过 MozRepl 控制 Firefox。
  • @Gurzo 你解决过这个问题吗?我也遇到了同样的问题。

标签: perl firefox mechanize www-mechanize


【解决方案1】:

这与 DBI 或 DBD::mysql 无关。这些消息无需担心,但我承认它们难看。

消息是在 Perl 全局销毁期间剩余的 Perl/Javascript 对象以无序方式销毁的。如果您想避免它们,请在之前销毁您的 $mech 对象 退出您的应用程序。

undef $mech;
# end of program

如果$mech 对象在程序关闭之前被释放,Perl/Javascript 桥也可以有序地关闭。

另请注意,有关 WWW::Mechanize::Firefox 问题的首选论坛是http://perlmonks.org :)

【讨论】:

  • 由于每个循环都需要调用一次 mech,我需要在每个循环结束时取消定义它还是在脚本结束时取消它?
  • 我尝试在每个周期结束时让它“undef $firemech”,但它仍然给出错误。唯一不同的是,这次它会持续 5-10 个周期,然后它会弹出。有什么想法吗?
  • 这并没有解决问题,但由于 Corion 对 PerlMonks 非常有帮助,我将答案授予他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2011-06-07
  • 2013-02-15
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多