2013-06-23 76 views
1

我想在我的模塊中創建一個靜態變量。我怎樣才能做到這一點?我可以使用ourstate嗎?如何在Perl中創建一個模塊全局內部變量?

這裏是什麼,我想實現一個例子:

use MyModule; 
MyModule::increase_count(); # should return 0 
MyModule::increase_count(); # should return 1 
MyModule::increase_count(); # should return 2 

回答

1

如果您要訪問$counter變量直接外MyModule包,使用our,但如果你不那麼my是應該是什麼使用

package MyModule; 

my $counter = 0; 
sub increase_count { 

    return $counter++; 
} 
7

如果你想使用state(這是一個好主意):

package MyModule; 

# return the previous value 
sub increase_count { 
    state $count = 0; 
    return $count++; 
} 

使用state可以最小化符號的可見性。如果你有共享的知名度翻過多個潛艇,你可以在一個塊中附上一個詞法變量:

{ 
    my $count = 0; 
    sub increase_count { $count++ } 
    sub current_count { $count } 
    sub decrease_count { $count-- } 
} 
+1

需要注意的是,如果你不爲塊使用'BEGIN'塊有,你有沒有保證,變量將在其函數被調用之前被初始化。在這種情況下,它差別不大,但在一般情況下,它肯定是這樣。 – tchrist

相關問題