gpt4 book ai didi

perl - Perl 中带有导出器的多个包

转载 作者:行者123 更新时间:2023-12-03 20:56:47 24 4
gpt4 key购买 nike

我正在尝试熟悉 Perl 导出器,我面临的问题是无论我尝试什么,我都无法将导出器与包含多个包的模块一起使用。我在下面缺少什么?

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

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

提前致谢。

最佳答案

use 调用 require ,它查找具有包名称的文件(/ 用于 :: 和 + .pm )。

所以 require 是包含包的实际文件,然后是包中的 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 中,将每个包放在自己的 block 中以提供词法变量的范围,因为 package 不会这样做,或者使用 package Pack { ... } since v5.14 。不需要所有这些 1 ,您可以将 use Exporter; 拉出 block 。

输出
Calling first package:First packageCalling second package:Second packageCalling third package:Third package

Better yet, replace our @ISA = qw(Exporter); with use Exporter qw(import); for

use strict;
use warnings;

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

sub test1 { print "First package\n" }
}
...
1;

具有相同的输出。

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

关于perl - Perl 中带有导出器的多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com