2014-10-08 64 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聲明。