perl - 如何在 Perl 中使用代码引用作为回调?

标签 perl reference scripting callback

我的类里面有以下代码:


sub new {
    my $class = shift;
    my %args  = @_;
    my $self  = {};
    bless( $self, $class );
    if ( exists $args{callback} ) {
        $self->{callback} = $args{callback};
    }
    if ( exists $args{dir} ) {
        $self->{dir} = $args{dir};
    }
    return $self;
}

sub test {
  my $self = shift;
  my $arg  = shift;
  &$self->{callback}($arg);
}


和一个包含以下代码的脚本:

use strict;
use warnings;
use MyPackage;

my $callback = sub {
   my $arg = shift;
   print $arg;
};

my $obj = MyPackage->new(callback => $callback);


但我收到以下错误:
Not a CODE reference ...

我错过了什么?打印 ref($self->{callback})显示 CODE .如果我使用 $self->{callback}->($arg) 就可以了,但我想使用另一种调用代码引用的方式。

最佳答案

& 号仅绑定(bind)到 $self而不是全部。您可以在返回引用的部分周围做 curl :

&{$self->{callback}}($arg);

但是
$self->{callback}->($arg);

一般认为比较干净,为什么不想用呢?

关于perl - 如何在 Perl 中使用代码引用作为回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/543929/

相关文章:

perl - 需要拆分 Unicode 字符串

linux - 根据第一列的开头合并 txt 中的几行

perl - 数据库 fetchrow_array 失败长截断 DBI 属性

c++ - 在 C++ 中分配对变量的引用

c++ - 仅限虚幻引擎 4 代码

linux - 如何在 Linux 中暂停另一个脚本几秒钟

arrays - 在 CSV 中写入数组值

PHP、数组和引用

c++ - 指定不绑定(bind)临时对象的 `const int&`

git - 如何知道 git 仓库是否有未与服务器(源)同步的更改?