2014-02-22 62 views
2

是否有可能在perl中聲明靜態常量hashrefs? 我用以下方式使用Readonly和Const :: Fast模塊嘗試它,但是當我多次調用子時,會收到錯誤消息「嘗試重新分配只讀變量」。perl靜態常量hashrefs

use Const::Fast; 
use feature 'state'; 

sub test { 
    const state $h => {1 => 1}; 
    #... 
} 

回答

2

const是一個函數,而你每次test被調用時調用它。這應該做的伎倆。

sub test { 
    state $h; 
    state $initialized; 
    const $h => ... if !$initialized++; 
    # ... 
} 

由於$h總是有一個真正的價值,我們可以使用以下命令:

sub test { 
    state $h; 
    const $h => ... if !$h; 
    # ... 
} 

當然,你仍然可以用做持久的詞法作用域變量的老路上。

{ 
    const my $h => ...; 

    sub test { 
     # ... 
    } 
} 
+0

添加到我的答案。 – ikegami