我正在使用 strict
和 warning
如果我使用未声明的变量,在我的 Perl 脚本中收到通知。因此,解释器将警告 $foo
在以下 scriptlet 中未声明:
#!/usr/bin/perl
use warnings;
use strict;
$foo = 'bar';
print ($foo);
但是,如果我在另一个命名空间中使用未声明的变量,我不会收到警告。以下 scriptlet 运行时不会发出任何警告。
#!/usr/bin/perl
use warnings;
use strict;
$BAR::foo = 'bar';
print ($BAR::foo);
为什么会有这种差异?
由于我已经花费了相当长的时间来弄清楚这个问题,尽管在更大的上下文中,我想知道是否有可能让 Perl 警告我在其他命名空间中使用未声明的变量。
最佳答案
当您完全指定变量所属的命名空间时,perl
假设你知道你在做什么。见 perldoc strict
:
strict vars
This generates a compile-time error if you access a variable that was neither explicitly declared (using any of
my
,our
,state
, oruse vars
) nor fully qualified.
我认为没有办法检测您指定了一个不存在的变量
$BAR::foo
.但是,如果 BAR
包在你的控制之下,你可以通过调解对 foo
状态的访问来避免使用包变量。使用访问器,并对其他模块隐藏变量。使用全局变量产生的问题的答案是不使用全局变量。
关于perl - 如果在另一个命名空间中使用未声明的变量,为什么 Perl 不会发出警告 - 我怎样才能得到警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488473/