gpt4 book ai didi

类中的 Perl 原型(prototype)子程序

转载 作者:行者123 更新时间:2023-12-02 05:36:50 26 4
gpt4 key购买 nike

我试图在不实例化对象的情况下从类中调用原型(prototype)函数。我的类(class) MyClass 的一个例子:

package MyClass;
use strict;
use warnings;

sub import{
my $class = shift;
my ($caller) = caller();
eval "sub ${caller}::myprot(\&);";
eval "*${caller}::myprot = \&MyClass::myprot;";
}

sub myprot (&) {
my ($f) = @_;
$f->();
}

1;

我想从脚本 main.pl 中调用原型(prototype):

use strict;
use warnings;

use MyClass;

myprot {
print "myprot\n";
};

我收到错误:

Use of uninitialized value in subroutine entry at MyClass.pm line 14.
Use of uninitialized value in subroutine entry at MyClass.pm line 14.
Undefined subroutine &main::myprot called at main.pm line 8.

我不太明白未定义的子例程错误:使用use,调用了import,它定义了main.pl 的原型(prototype)。我也真的不明白未初始化的值错误。我很乐意提供一些解释。

最佳答案

您正在寻找导出商。

package MyClass;
use strict;
use warnings;

use Exporter qw( import );

our @EXPORT = qw( myprot );

sub myprot(&) {
my ($f) = @_;
$f->();
}

1;

我通常使用@EXPORT_OK(需要使用use MyClass qw( myprot );)而不是默认导出。

关于类中的 Perl 原型(prototype)子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27235919/

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