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