加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么Perl不会在另一个名称空间中使用未声明的变量时发出警告

发布时间:2020-12-16 06:09:53 所属栏目:大数据 来源:网络整理
导读:如果我使用未声明的变量,我在Perl脚本中使用strict和warning来通知我.因此,解释器将在以下scriptlet中警告$foo未声明: #!/usr/bin/perluse warnings;use strict;$foo = 'bar';print ($foo); 但是,如果我在另一个命名空间中使用未声明的变量,我不会被警告.以
如果我使用未声明的变量,我在Perl脚本中使用strict和warning来通知我.因此,解释器将在以下scriptlet中警告$foo未声明:

#!/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状态的访问,并将变量隐藏在其他模块中来避免首先使用包变量.

使用全局变量创建的问题的答案不是使用全局变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读