如何在 Perl 中将 array/list 定义为全局?

how to define array/list as global in Perl?

我有一个名为@missing_ports 的数组,这个数组一直在从不同的子程序和循环中更新。所以数组需要是全局的。如何在 perl 中将此数组定义为全局数组。 代码包含 使用警告; 使用严格;

我在程序开始时声明这个数组时没有使用“my”关键字,面临以下错误 @missing_ports" 在 experiment.pl 处需要明确的包名称 使用我的关键字能够解决错误,但最后数组为空。

如何在 perl 中处理这种情况?

下面创建一个词法变量:

my @missing_ports;

如果它放在文件的开头,变量将对整个文件可见。


下面创建一个别名为包(全局)变量的词法变量:

our @missing_ports;

您可以在同一个包的多个地方使用它。

您仍然需要使用其他包中的变量全名。


下面声明包变量:

use vars qw( @missing_ports );

这不是词法范围的。

您仍然需要使用其他包中的变量全名。


当然,您始终可以使用变量的全名。

$main::missing_ports

这不需要声明,但如果只按名称引用一次就会发出警告。所以最好结合ouruse vars.


标点符号变量(例如 $_)是“超级全局变量”。在没有包名称的情况下使用这些变量不会默认为当前包中的变量;它默认为 root/main 命名空间中的一个变量。 (例如 package Foo; $x; $_; 表示 package Foo; $Foo::x; $main::_;。)没有办法制作额外的超全局变量。


最后一点,除了 my 之外,此处列出的所有方法都是错误代码的强烈指示。