【发布时间】:2011-04-08 10:12:03
【问题描述】:
我有两个 perl 模块,一个是“对象库”,另一个是从这个“对象库”模块导入函数。当我编译第二个模块 (perl -c Foo/Bar/NewObject.pm) 时,它编译时没有任何警告。
问题是,如果我在编译第二个模块 (perl -MUNIVERSAL -Mstrict -wc Foo/Bar/NewObject.pm) 时包含 UNIVERSAL 模块,它会引发如下警告:
"set" 不是由 Foo::Bar::Object 模块导出的
所以我的问题是为什么包含 UNIVERSAL 会导致 Exporter 函数无法从“对象库”模型中导出符号?
模块外观示例如下。
对象基础:
#!/usr/bin/perl -w
use strict;
package Foo::Bar::Object;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( new set get update create );
...
1;
第二个模块:
#!/usr/bin/perl -w
use strict;
package Foo::Bar::NewObject;
use Foo::Bar::Object qw( new set get );
...
1;
【问题讨论】:
-
这里的代码对我来说很好用。问题很可能出现在您未显示的代码中。
-
你为什么要使用
UNIVERSAL?你想达到什么目的?默认情况下,所有包都已从UNIVERSAL继承。 -
提示:
perl -wc Foo/Bar/NewObject.pm不如perl -wce'use Foo::Bar::NewObject。不知道这里是否重要。 -
您是否有任何循环依赖(A 使用 B,B 使用 A,可能不是直接)?查看http://www.perlmonks.org/?node_id=778639
标签: perl