我在包 main 中的 file_1.pl 中有以下全局变量:
package main;
my $var = -1;
如果我需要从另一个 perl 文件更新这个变量,这样做的方法是什么?我试过:
$main::var = 1
但它没有用。
正确的做法是什么?
谢谢你!
我在包 main 中的 file_1.pl 中有以下全局变量:
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);