2014-10-08 62 views
0

Perl中是否可以嵌套模块并将所有嵌套子例程导出为使用父模块的脚本?考虑以下示例:Perl - 在主脚本中嵌套来自第二级嵌套模块的模块和访问子程序

主脚本将使用ParentModule中的子例程。因此,在脚本将被下面一行:

use ParentModule; 

ParentModule将使用子程序从ChildModule。因此,在ParentModule将下面一行:

use ChildModule; 

ChildModule下主脚本可用下出口子程序?

前些时间,我问了类似的问题here答案是否定的,但这是安静的不同于以前的意思。此外,我尝试了上述情况,它没有奏效。有没有其他方法如何做到这一点?

PS:所有模块都使用导出器。

谢谢

+0

如果您切换单词“父”和“孩子”,您所描述的是[继承](http://perldoc.perl.org/perlobj.html#Inheritance)。 – ThisSuitIsBlackNot 2014-10-08 17:18:11

回答

4

ParentModule需要出口到明确地提供ChildModule符号。由于您使用Exporter,做到这一点的最简单的方法是:

ChildModule.pm

package ChildModule; 

use strict; 
use warnings; 

use base 'Exporter'; 

our @EXPORT = ('cf'); 

sub cf { print "Child\n" } 

1; 

ParentModule.pm

package ParentModule; 

use strict; 
use warnings; 

use base 'Exporter'; 

use ChildModule; 

our @EXPORT = ('pf', @ChildModule::EXPORT); 

sub pf { print "Parent\n" } 

1; 

然后,

% perl -MParentModule -e 'pf; cf' 
Parent 
Child 

这不是典型的不过,默认情况下,出口商品的形式很好。您可以使用@EXPORT_OK播放相同的技巧,但您仍然需要将ChildModule例程明确导入ParentModule,否则ParentModule将无法​​导出它们。

还有其他的模块,让你避免最后一步(例如Import::Into),但你需要在ParentModule制作一个定制import()程序,如果你想保留简单use ParentModule声明。