perl 从包中导出匿名函数

juzqafwq  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(164)

我得到了一个包,为了简单起见,我们称它为Foo.pm。在那里,我得到了一些匿名函数,我想导出这些函数。
Foo.pm 看起来如下:

package Foo;

use Exporter qw(import);
our @EXPORT_OK = ();
our @EXPORT = qw(
    subroutine1
    subroutine2

    $anon_function
);

subroutine1 {
    # Do something here
}

subroutine2 {
    # Do something else here
}

my $anon_function = sub {
    my $parameter = shift;

    # Do something with parameter

    return 1 if $parameter == 1 or $parameter == 2;
    return 0;
}

在我的主脚本中,将其命名为bar.pl,我导入模块并(显然)使用其函数。
bar.pl:

use lib "/usr/share";
use Foo;

subroutine1("foobar");
subroutine2("foobar");

&$anon_function("foobar");

在www.example.com之外使用正常的子例程Foo.pm似乎没有问题,但当我到达&$anon_function()时,它会产生以下错误:

Use of uninitialized value in subroutine entry at ./bar.pl line 7

当尝试使用print Dumper \$anon_function打印匿名函数时,它也返回$VAR1 = \undef

TL;DR:如何从包中导出匿名函数?

whlutmcx

whlutmcx1#

不能导出词法变量。只能导出符号,即程序包全局变量和命名子例程。
更改为our的工作方式:

use Exporter qw{ import };
our @EXPORT = qw( $anon );
our $anon = sub { ... };

相关问题