我有一个Perl Subversion 预提交钩子。使用 Perl 5.14 的人弹出了一条神秘的错误消息,这在早期版本的 Perl 中是没有的:
(in cleanup) Non existant subroutine called Section::File::DESTROY at /home/tftung/svn_repos/hooks/pre-commit-kitchen-sink-hook.pl line 282
首先让我印象深刻的是nonexistent的拼写错误。小子,那家伙根本不会拼音!这几乎和……我的拼写一样糟糕……等一下……
在我的代码的第 1251 行,这是来自我的AUTOLOAD
子程序:
croak qq(Non existant subroutine called $AUTOLOAD);
是的,这就是错误行。
这在 Perl 5.12 中没有发生,这是我在 Mac 上使用的,并且在我的 PC 上具有草莓和 ActiveState 两种风格。从 Perl 5.8 到 5.10 的企业 Linux 机器也不会发生这种情况。
看起来 Perl 正在调用DESTROY
,并且它正在被我的子例程拾取AUTOLOAD
,并且由于在我的包中DESTROY
是不存在AUTOLOAD
的子例程,因此子例程会显示此错误消息。
- 这是新版本 Perl 中的错误还是功能?看来 AUTOLOAD 接听对 DESTROY 的呼叫是相当新的功能。
- 我应该如何解决这个问题?我的意思是除了摆脱我的 AUTOLOAD 子程序,这可能是正确的答案。我计划从头开始完全重写这个脚本,所以我宁愿不做很多工作。
- 我可以编写一个
DESTROY
什么都不做的子程序。 - 我可以让我的
AUTOLOAD
例行程序忽略对DESTROY
.
- 我可以编写一个
处理此问题的最佳方法是什么?