2012-01-30 132 views
1

我從來沒有在perl中實際使用過子程序的屬性,但它碰巧發現了它們的用法,所以我一直在試圖理解如何使用它們。特別是,我需要能夠在運行時發現子例程的屬性。我有下面的測試代碼,但它只能輸出一個空列表:attributes :: get()返回空列表?

use attributes; 

sub MODIFY_CODE_ATTRIBUTES { 
    my ($class,$code,@attrs) = @_; 

    my $allowed = 'takeshash'; 
    my @bad = grep { $_ ne $allowed } @attrs; 

    return @bad; 
} 
sub mylog : takeshash { 

    my $params = shift; 
    my $val = log($params->{'n'})/log($params->{'base'}); 

    return $val; 
} 

use Data::Dumper; 
print Dumper [attributes::get(\&mylog)]; 

運行的perl v5.12.4,我得到:

$ perl temp.pl 
$VAR1 = []; 

回答

2

看起來像你的問題是由部分上解釋Available Subroutinesattributes documentation。爲get子程序的解釋說:

這個程序只需要一個參數 - 一個子程序 或變量的引用。它返回一個可能爲空的屬性列表。如果 傳遞無效參數,它會使用die()(通過Carp :: croak)引發一個致命異常。如果它可以爲 類方法查找找到一個合適的包名,它將包括來自 FETCH_type_ATTRIBUTES調用它的返回列表,如 特定包屬性下面描述的處理結果。 否則,只會返回內置的 屬性。

注意最後一句,在那裏我已經添加的重視。看起來您需要添加FETCH_CODE_ATTRIBUTES子例程。

+0

謝謝,我能夠通過RTFM算出這個自己,但出於某種原因在堆棧溢出不能得到張貼我的解決方案。 – 2012-01-31 14:50:15