我正在尝试熟悉Perl导出器,我面临的问题是我尝试的任何东西我都不能使用包含多个包的模块的exporter.我在下面想念的是什么?
MyModule.pm
use strict;
use warnings;
package Multipackage1;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(test1);
sub test1 {
print "First package\n";
}
1;
package Multipackage2;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(test2);
sub test2 {
print "Second package\n";
}
1;
package Multipackage3;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(test3);
sub test3 {
print "Third package\n";
}
1;
MyMainFile.pl
#!/usr/bin/perl
use strict;
use warnings;
use Multipackage;
use Multipackage qw(test3);
print "Calling first package:\n";
test1();
print "Calling second package:\n";
test2();
print "Calling third package:\n";
test3();
Run Code Online (Sandbox Code Playgroud)
我得到test1不是主要包的一部分.
提前致谢.
zdi*_*dim 11
在使用通话需要,它看起来与包名称的文件(/
用于::
和+ .pm
).
所以require
用包代替实际文件,然后从包中导入.
main.pl
use warnings;
use strict;
require MyModule;
import Multipackage1;
import Multipackage2;
import Multipackage3 qw(test3);
print "Calling first package:\n";
test1();
print "Calling second package:\n";
test2();
print "Calling third package:\n";
test3();
Run Code Online (Sandbox Code Playgroud)
在MyModule.pm
,将每个包放在它自己的块中以提供词法变量的范围,因为包不会这样做,或者package Pack { ... }
从v5.14开始使用.没有必要所有这些1
,你可以拉出use Exporter;
块.
产量
Calling first package: First package Calling second package: Second package Calling third package: Third package
更重要的是,更换our @ISA = qw(Exporter);
用use Exporter qw(import);
的
use strict;
use warnings;
package Multipackage1 {
use Exporter qw(import);
our @EXPORT = qw(test1);
sub test1 { print "First package\n" }
}
...
1;
Run Code Online (Sandbox Code Playgroud)
具有相同的输出.
请注意,通常不需要将多个包放在一个文件中.
归档时间: |
|
查看次数: |
153 次 |
最近记录: |