如何在Perl中创建模块全局内部变量?

时间:2013-06-23 11:29:16

标签: perl

我想在我的模块中创建一个静态变量。我怎样才能做到这一点?我可以使用ourstate吗?

这是我想要实现的一个例子:

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果您想直接访问$counter个包之外的MyModule变量,请使用our,但如果不这样做,那么应使用my,< / p>

package MyModule;

my $counter = 0;
sub increase_count {

  return $counter++;
}