gpt4 book ai didi

perl - 从同一文件中定义的包中导入符号

转载 作者:行者123 更新时间:2023-12-05 03:28:09 25 4
gpt4 key购买 nike

我希望我能做这样的事情:

p.pl :

package Common;
use strict;
use warnings;
use experimental qw(signatures);
use Exporter qw(import);
our @EXPORT = qw(NA);
sub NA() { "NA" }


package Main;
use feature qw(say);
use strict;
use warnings;
use experimental qw(signatures);
Common->import();
say "Main: ", NA();
my $client = Client->new();
$client->run();


package Client;
use feature qw(say);
use strict;
use warnings;
use experimental qw(signatures);
Common->import();
sub run($self) {
say "Client: ", NA();
}
sub new( $class, %args ) { bless \%args, $class }

在同一文件中的两个包之间共享公共(public)符号。但是运行这个脚本会得到:

$ perl p.pl
Main: NA
Undefined subroutine &Client::NA called at ./p.pl line 30.

我在这里错过了什么?

最佳答案

问题是你打电话

$client->run();

之前

Common->import();

内联模块的简单方法:

BEGIN {
package Common;
use strict;
use warnings;
use experimental qw(signatures);
use Exporter qw(import);
our @EXPORT = qw(NA);
sub NA() { "NA" }
$INC{"Common.pm"} = 1;
}

然后你可以像往常一样使用use Common;

它并不完美。像 App::FatPacker 那样连接到 @INC 确实提供了最好的结果。但它会让您的生活更轻松。

关于perl - 从同一文件中定义的包中导入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71296586/

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