Perl 当包名与文件名不同时,如何导出名称?
我有一个包含2个包的文件Scanners.pm。我希望这两个包都导出一些名称。我不希望这些包在单独的文件中,我希望它们在一个文件中 当我写作时Perl 当包名与文件名不同时,如何导出名称?,perl,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 Sca
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
列表中的名称不会导出。我是如何做到的?您可以为扫描仪软件包创建自定义导入子组件
注意,只有当用户依赖默认的@EXPORT only时,此代码才起作用。如果您希望它们能够指定所需的函数,那么在调用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__
最后,如果我没有提到这在表面上不是一个好主意,我会是雷米。这段代码的未来维护者将不容易跟踪这些sub。因此,无论您希望将它们放在同一个文件但不同的包中的原因是什么,我怀疑有更好的解决方案。
use Scanner
调用Scanner::import
,因此您需要从第二个包中导出符号。为什么它们需要放在同一个包中file@justintime,这些模块会随着时间的推移而演变,必须保持在一起。将它们保存在一个文件中是确保它们相互匹配并在复制时保持在一起的一种方法。为什么它们“必须保持在一起”。系统不断发展,有时需要重新组织代码以实现可维护性。