更新Perl全局变量的正确方法



我在file_1.pl中的包main中有以下全局in变量:

package main;
my $var = -1;

如果我需要从另一个perl文件更新这个变量,有什么方法?我试过了:

$main::var = 1

但这并没有奏效。

正确的做法是什么?

谢谢!

my生成一个词法变量。它的作用域为它的块,或者,如果不在块中,则为文件。在他们的范围之外看不到他们。

您可以创建一个全局变量,正如其他答案所示:

our $var;

然而,更好的方法是为代码的其他部分提供一个更新词法版本的接口:

my $private;
sub set_private { $private = shift }

然而,如果要这样做,您还可以有一个用于获取值的接口。现在,该变量只需要与使用它的子例程在同一范围内,就可以对文件的其余部分隐藏它:

{
my $private;
sub set_private { $private = shift }
sub get_private { $private }
}

现在,您离一个对象(在本例中为单例)只有一步之遥:

use v5.12;
package Foo {
    my $private;
    sub new { bless $private, shift }
    sub set { my $self = shift; $$self = shift; }
    sub get { my $self = shift; $$self; }
    }

您必须用our声明变量,否则它将被视为词法变量,因此将其更改为

our $var = -1; 

您可以创建一个包装函数。

在主文件中

our $var;
sub updateGlobal {
   $var = shift;
}

在另一个文件中,只需调用一个函数

updateGlobal(1);

相关内容

  • 没有找到相关文章

最新更新