我班上有以下代码:
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)
,但我想使用另一种方式调用代码ref.
&符号只是绑定$self
而不是整个绑定.你可以在返回引用的部分周围做curlies:
&{$self->{callback}}($arg);
但是
$self->{callback}->($arg);
通常被认为是清洁的,为什么你不想使用它?