Perl 未加载@ISA中的包时多次发出相同警告
在重构我的一些perl代码时,我 注意到以下strang行为。Perl 未加载@ISA中的包时多次发出相同警告,perl,perl-module,Perl,Perl Module,在重构我的一些perl代码时,我 注意到以下strang行为。 考虑这个小样本脚本: #!/usr/bin/perl -w package test; use strict; my $obj = bless( {}, __PACKAGE__); our @ISA = qw( missing ); exit(0) 预期的警告 显示三次,而不是仅显示一次。此警告的其他两个触发器是什么?这三个都指退出(0) GentooLinux上的perl版本5.12.4 谢谢。我相信tjd已经得到了答案。如
考虑这个小样本脚本:
#!/usr/bin/perl -w
package test;
use strict;
my $obj = bless( {}, __PACKAGE__);
our @ISA = qw( missing );
exit(0)
预期的警告
显示三次,而不是仅显示一次。此警告的其他两个触发器是什么?这三个都指退出(0)GentooLinux上的perl版本5.12.4
谢谢。我相信tjd已经得到了答案。如果向测试包中添加DESTROY()和AUTOLOAD()方法,则只会收到一条警告(关于缺少@test::ISA) 您通常需要确保@ISA列表中列出的包已经加载。在您的示例中,您可能希望看到以下内容:
package test;
use strict;
use missing;
our @ISA = ('missing');
您的包没有显式的new()方法,这有点奇怪。相反,您有一个调用bless()的语句
如果您有一个新的()方法,如下所示:
sub new() { return bless {}, __PACKAGE__; }
package test;
use strict;
use warning;
use base ('missing');
sub new { bless {}, __PACKAGE__);
sub DESTROY {}
sub AUTOLOAD {}
1;
然后,直到出现一个名为new()的消息,您才会看到三重错误消息
您可能希望使用pragma'base',这将给您一个致命错误,说明它无法加载'missing'包:
package test;
use strict;
use base ('missing');
sub new { bless {}, __PACKAGE__);
基本杂注尝试为您加载丢失的包。您不需要单独的“use missing”语句
最后一件事可能是这样的:
sub new() { return bless {}, __PACKAGE__; }
package test;
use strict;
use warning;
use base ('missing');
sub new { bless {}, __PACKAGE__);
sub DESTROY {}
sub AUTOLOAD {}
1;
然后,您可以将这一切打包到一个名为test.pm的文件中,并在脚本中使用它:
use strict;
use test;
my $object = test->new(); # Should fatal, as there is no 'missing' module
希望这能有所帮助。@missing::ISA和missing::DESTROY是两个可能的候选项。甚至可能&missing::AUTOLOAD…在Perl5.16之前只有三个警告。对于Perl5.18,只有两个警告。
use strict;
use test;
my $object = test->new(); # Should fatal, as there is no 'missing' module