加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中使用导出器的多个包

发布时间:2020-12-15 21:50:17 所属栏目:大数据 来源:网络整理
导读:我正在努力熟悉Perl导出器,我面临的问题是我尝试的任何东西我都不能使用导出器和包含多个包的模块.我在下面想念的是什么? MyModule.pmuse strict;use warnings;package Multipackage1;use Exporter;our @ISA = qw(Exporter);our @EXPORT = qw(test1);sub te
我正在努力熟悉Perl导出器,我面临的问题是我尝试的任何东西我都不能使用导出器和包含多个包的模块.我在下面想念的是什么?
MyModule.pm

use strict;
use warnings;

package Multipackage1;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(test1);

sub test1 {

  print "First packagen";

}

1;

package Multipackage2;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(test2);

sub test2 {

   print "Second packagen";

}

1;

package Multipackage3;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(test3);

sub test3 {

   print "Third packagen";

}

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();

我得到test1不是主包的一部分.

提前致谢.

解决方法

use调用 require,它查找包名称的文件(使用/ for ::和.pm).

因此,需要使用包来代替实际文件,然后从包中请求import.

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();

在MyModule.pm中,将每个包放在它自己的块中以提供词法变量的范围,因为package不这样做,或者使用包Pack {…} since v5.14.不需要所有那些1,而你可以拉使用出口商;走出街区.

产量

Calling first package:
First package
Calling second package:
Second package
Calling third package:
Third package

更好的是,取代我们的@ISA = qw(出口商);使用Exporter qw(import);对于

use strict;
use warnings;

package Multipackage1 {
    use Exporter qw(import);
    our @EXPORT = qw(test1);

    sub test1 { print "First packagen" }
}
...
1;

具有相同的输出.

请注意,通常不需要将多个包放在一个文件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读