2

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

package main;

my $var = -1;

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

$main::var = 1

但它没有用。

正确的做法是什么?

谢谢你!

4

3 回答 3

8

生成一个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; }
    }
于 2012-04-05T11:54:27.983 回答
3

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

our $var = -1; 
于 2012-04-05T11:24:25.753 回答
1

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

在主文件中

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

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

updateGlobal(1);
于 2012-04-05T11:23:53.983 回答