我相信 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
希望这可以帮助。