Perl明确使用模块UNIVERSAL导致模块不导出任何符号

时间:2011-03-10 07:59:12

标签: perl

我有两个perl模块,其中一个是“对象库”,另一个是从“对象库”模块导入函数。当我编译第二个模块(perl -c Foo/Bar/NewObject.pm)时,它编译时没有任何警告。

问题是,如果我将UNIVERSAL模块包含在编译第二个模块(perl -MUNIVERSAL -Mstrict -wc Foo/Bar/NewObject.pm)中,它会抛出如下警告:
“set”不会被Foo :: Bar :: Object模块

导出

所以我的问题是为什么包含UNIVERSAL导致Exporter函数无法从'object base'模型导出符号?

下面是模块外观的一个例子。

对象库:

#!/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;

1 个答案:

答案 0 :(得分:0)

我最后通过跟踪评论中链接的@ikegami来解决这个问题。我不得不将@EXPORT包装在BEGIN {}块中,这似乎有效。

必须有一个模块在导出之前尝试使用这些方法。