2009-02-12 42 views
8

我有我的類下面的代碼:如何在Perl中使用代碼ref作爲回調?


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。

+1

爲什麼你想要另一種方式取消引用代碼ref?使用什麼工作,並繼續下一個問題。 :) – 2009-02-13 05:38:38

回答

18

&符號僅對$self有約束力,而不是全部。你可以圍繞返回引用的部分花括號:

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

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

被普遍認爲是清潔的,爲什麼你不希望使用它?

+0

我的perl有點生鏽。我知道我錯過了一些東西,我想知道那是什麼:)。謝謝你,亞當! – Geo 2009-02-12 23:14:38

相關問題