perl – 在未加载@ISA中的包时多次发出相同的警告
发布时间:2020-12-15 21:52:11 所属栏目:大数据 来源:网络整理
导读:而重构我的一些perl代码我 注意到以下扼杀行为. 考虑这个小样本脚本: #!/usr/bin/perl -wpackage test;use strict;my $obj = bless( {},__PACKAGE__);our @ISA = qw( missing );exit(0) 预期的警告 Can't locate package missing for @test::ISA at test.pl
而重构我的一些perl代码我
注意到以下扼杀行为. 考虑这个小样本脚本: #!/usr/bin/perl -w package test; use strict; my $obj = bless( {},__PACKAGE__); our @ISA = qw( missing ); exit(0) 预期的警告 Can't locate package missing for @test::ISA at test.pl line 8 出现三次而不是一次.此警告的另外两个触发器是什么?所有三个都指出口(0). 谢谢. 解决方法
我相信tjd得到了答案.如果您将DESTROY()和AUTOLOAD()方法添加到测试包中,您将只收到一个警告(关于缺少@test :: ISA).
package test; use strict; sub DESTROY {} sub AUTOLOAD {} 您通常需要确保已加载@ISA列表中列出的包.在您的示例中,您可能希望看到类似的内容: package test; use strict; use missing; our @ISA = ('missing'); 有点好奇你的包没有显式的new()方法.相反,你有一个调用bless()的语句; 如果你有一个new()方法,像这样: sub new() { return bless {},__PACKAGE__; } 然后在看到new()之前你不会看到三重错误消息; package main; my $object = test->new(); # Triple warning 你可能想要使用pragma’base’,它会给你一个致命的错误,说它无法加载’missing’包: package test; use strict; use base ('missing'); sub new { 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 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |