perl - 如果在另一个命名空间中使用未声明的变量,为什么 Perl 不会发出警告 - 我怎样才能得到警告?

标签 perl variables warnings

我正在使用 strictwarning如果我使用未声明的变量,在我的 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, or use vars) nor fully qualified.


我认为没有办法检测您指定了一个不存在的变量 $BAR::foo .但是,如果 BAR包在你的控制之下,你可以通过调解对 foo 状态的访问来避免使用包变量。使用访问器,并对其他模块隐藏变量。
使用全局变量产生的问题的答案是不使用全局变量。

关于perl - 如果在另一个命名空间中使用未声明的变量,为什么 Perl 不会发出警告 - 我怎样才能得到警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488473/

相关文章:

perl - 如何使用perl建立两个变量之间的关系,类似于代谢网络

MacOS 10.12.6 安装 Perl 模块 WWW:Curl::Availability.h 中出现简单错误

java - 我可以更改方法返回变量的内容吗?

bash - 如何在 bash 中创建本地只读变量?

c - 警告 : Implicit declaration error

perl - 复制数组到哈希

regex - Perl CLI 就地字符串替换/用特殊字符替换多行

linux - Bash 脚本变量

html - 为什么 Visual Studio 警告未终止的字符串常量

git - 禁用有关分离的 HEAD 的警告