为什么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 :
我认为没有办法检测到你指定了一个不存在的变量$BAR :: foo.但是,如果BAR包在您的控制之下,您可以通过使用访问器调解对foo状态的访问,并将变量隐藏在其他模块中来避免首先使用包变量. 使用全局变量创建的问题的答案不是使用全局变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |