Perl - 在主脚本中嵌套来自第二级嵌套模块的模块和访问子例程

时间:2014-10-08 17:15:49

标签: perl module

是否可以在perl中嵌套模块并将所有嵌套子例程导出到使用父模块的脚本?请考虑以下示例:

主脚本将使用ParentModule中的子程序。因此在脚本中将遵循以下行:

use ParentModule;

ParentModule将使用ChildModule中的子程序。因此ParentModule将遵循以下行:

use ChildModule;

ChildModule下导出的子程序是否可以在主脚本下使用?

有些时候我曾问过类似的问题here而答案是否定的,但这与以前的意思不同。此外,我已经尝试了上述情况,但没有奏效。有没有其他方法可以做到这一点?

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

谢谢

1 个答案:

答案 0 :(得分: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例程明确导入ParentModuleParentModule,但无法将其导出

还有其他模块允许您避开最后一步(例如Import::Into),但如果您愿意,您需要在import()中制作自定义ParentModule例程保留简单的use ParentModule语句。