![](/img/trans.png)
[英]I get error 'Can't use string as a HASH ref while "strict refs"....' when i use my perl code
[英]How can I use a code ref as a callback in Perl?
我班上有以下代码:
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);
通常被认为是清洁的,为什么你不想使用它?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.