Tengo el siguiente código en mi clase:¿Cómo puedo usar un código ref como devolución de llamada en 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);
}
y un script que contiene el siguiente código:
use strict;
use warnings;
use MyPackage;
my $callback = sub {
my $arg = shift;
print $arg;
};
my $obj = MyPackage->new(callback => $callback);
pero recibo el siguiente error:
Not a CODE reference ...
¿Qué soy yo ¿desaparecido? Imprimir ref($self->{callback})
muestra CODE
. Funciona si uso $self->{callback}->($arg)
, pero me gustaría utilizar otra forma de invocar el código ref.
¿Por qué quieres otra forma de desreferenciar un código ref? Usa lo que funciona y pasa al siguiente problema. :) –