Mam następujący kod w mojej klasie:Jak mogę użyć kodu ref jako callback w Perlu?
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);
}
i skrypt zawierający następujący kod:
use strict;
use warnings;
use MyPackage;
my $callback = sub {
my $arg = shift;
print $arg;
};
my $obj = MyPackage->new(callback => $callback);
ale pojawia się następujący błąd:
Not a CODE reference ...
co ja brakujący? Drukowanie ref($self->{callback})
pokazuje CODE
. Działa, jeśli używam $self->{callback}->($arg)
, ale chciałbym użyć innego sposobu wywoływania kodu ref.
Dlaczego chcesz inny sposób na wyłuskiwanie kodu ref? Użyj tego, co działa i przejdź do następnego problemu. :) –