2013-06-23 35 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

相关问题