gpt4 book ai didi

perl - 在 Perl 中找不到导出的子例程

转载 作者:行者123 更新时间:2023-12-02 06:13:41 25 4
gpt4 key购买 nike

我有一个名为 Utilities.pm 的模块。它导出一个名为 dummy_method 的子例程。

package Foo::Utilities;

use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);

require Exporter;

@ISA = qw(Exporter);
@EXPORT = qw(dummy_method);

sub dummy_method {
# do things
}

我有一个使用 dummy_method 子例程的 Perl 脚本:

use strict;
use warnings;

use Foo::Utilities qw('dummy_method');

my $foo = Foo::Utilities::dummy_method("foo");
print("$foo\n");

执行该脚本会引发导出错误:

"dummy_method" is not exported by the Foo::Utilities module
Can't continue after import errors at /home/me/foo.pl line 3
BEGIN failed--compilation aborted at /home/me/foo.pl line 3.

我很困惑,因为我用 @EXPORT = qw(dummy_method); 显式地导出了那个子例程。如何在另一个脚本中使用 dummy_method

最佳答案

有些人痴迷于使用 qw 作为导入列表,即使只有一个元素。我认为这会让其他人认为这是一项要求,而这只是制作列表的一种方式。

use Foo::Utilities qw('dummy_method');

表示要导入一个名为'dummy_method' 的方法,而不是dummy_method,就像print qw('dummy_method') 打印 'dummy_method',不是 dummy_method

改为尝试:

use Foo::Utilities 'dummy_method';

或者,如果您必须:

use Foo::Utilities qw(dummy_method);

虽然默认情况下是导出它,但您可以这样做:

use Foo::Utilities;

或者,因为您将其称为 Foo::Utilities::dummy_method,所以默认情况下甚至不导出它:

use Foo::Utilities ();

关于perl - 在 Perl 中找不到导出的子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51193981/

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