gpt4 book ai didi

Perl sub 未导出到模块

转载 作者:行者123 更新时间:2023-12-04 00:36:28 26 4
gpt4 key购买 nike

我有一个我编写的 perl 模块,它使用来自 MIME::Base64 的 encode_base64 函数。出于某种原因,encode_base64 没有导出到我的模块的命名空间中。

我可能遗漏了什么,但我希望有人能解释它是什么。

这是我的模块:

use strict;
use Exporter;
use MIME::Base64;

package b64_test;

BEGIN {
our $VERSION = 1.00;
our @ISA = qw(Exporter);
our @EXPORT = qw(enc);
}

sub enc {
my $msg = shift;
my $encoded = encode_base64($msg);
print $encoded . "\n";
}

1;

我在这里的测试脚本中使用该模块:

#!/usr/bin/env perl

use lib '..';
use b64_test;

my $str = "Test";

enc($str);

当我调用测试脚本时,我得到 Undefined subroutine &b64_test::encode_base64 called at b64_test.pm line 18.

为了确保我的机器没有问题,我制作了另一个使用 MIME::Base64 的测试脚本,这个脚本运行良好:

#!/usr/bin/env perl

use MIME::Base64;

my $encoded = encode_base64("TEST");
print $encoded . "\n";

这使我相信它与模块 sub 导出到其他模块的方式有关,但我不知道。任何人都可以阐明这一点吗?

最佳答案

解决方案:package b64_test; 放在模块的顶部。

包语句将编译单元声明为在给定的命名空间中。包声明的范围是从声明本身到封闭 block 、eval 或文件的末尾,以先到者为准。

在您的情况下,您首先使用d 模块并定义了创建另一个命名空间的包。因此脚本无法找到方法。


模块: b64_test.pm

chankeypathak@stackoverflow:~$ cat b64_test.pm

package b64_test;
use strict;
use Exporter;
use MIME::Base64;

BEGIN {
our $VERSION = 1.00;
our @ISA = qw(Exporter);
our @EXPORT = qw(enc);
}

sub enc {
my $msg = shift;
my $encoded = encode_base64($msg);
print $encoded . "\n";
}

1;

测试脚本:test.pl

chankeypathak@stackoverflow:~$ cat test.pl

#!/usr/bin/env perl
use lib '.';
use b64_test;

my $str = "Test";

enc($str);

输出:

chankeypathak@stackoverflow:~$ perl test.pl
VGVzdA==

关于Perl sub 未导出到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41022311/

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