gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:48:26 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com