如果包名与文件名不同,如何导出名称?

时间:2014-03-06 17:45:26

标签: perl

我有一个包含2个软件包的Scanners.pm文件。我希望这两个包都能导出一些名字。我不希望这些包在单独的文件中,我希望它们在一个文件中。

写作时

package SCAN;

use Exporter;
our @ISA       = qw(Exporter);
our @EXPORT    = qw(@SCANNERS @NAMES %NAMES name_index process_scanners);
our @EXPORT_OK = qw();

然后在调用.pl文件

use Scanner;

不会导出@EXPORT列表中的名称。我是怎么做到的?

1 个答案:

答案 0 :(得分:2)

您可以为Scanner包创建自定义导入子。 Exporting Without Using Exporter's import Method

请注意,此代码仅在用户仅依赖于默认@EXPORT时才有效。如果您希望他们能够指定他们想要的功能,那么您必须在调用export_to_level之前进行过滤。

package Scanner;

use Exporter;
our @ISA       = qw(Exporter);
our @EXPORT    = qw(scannersub);

use strict;
use warnings;

sub import {
    Scanner->export_to_level(1, @_);
    ScannerTwo->export_to_level(1, @_);
}

sub scannersub {
    print "scanner->sub says hi\n";
}


package ScannerTwo;

use Exporter;
our @ISA       = qw(Exporter);
our @EXPORT    = qw(scannertwosub);

sub scannertwosub {
    print "scannertwo->sub says hi\n";
}

1;

__END__

和你的脚本

use Scanner;

use strict;
use warnings;

scannersub();
scannertwosub();

1;

__END__

最后,如果我没有提到这在表面上并不是一个好主意,那么我会感到害怕。此代码的未来维护者将无法轻松跟踪这些子代码。所以无论你想把它们放在同一个文件中但不同的包中,我怀疑有更好的解决方案。