Perlcritic:如何解决"^魔术变量"$ENV"应该被分配为"local""?



我正在编写一个perl脚本,在调用外部程序之前需要设置许多环境变量。我的代码格式为

$ENV{'VAR1'}    = "value1";
$ENV{'VAR2'}    = "value2";

当通过perlcritic运行此操作时,我会得到每个这样的任务的严重性4违规:

^Magic variable "$ENV" should be assigned as "local"

在谷歌上搜索错误消息并没有给我任何好的解决方案。在这种情况下,抱怨的perlcritic冲突是Variables::RequireLocalized标点变量,给出的示例处理文件句柄的本地化。我试图在Perl最佳实践中找到相关的部分,但它只谈到了本地化包变量。

我尝试的一个解决方案是在赋值之前使用以下语句本地化%ENV。

local %ENV = ();

这并不能解决违规问题。

我的问题如下:

该Perlcritic违规是否与%ENV的分配相关,或者我可以忽略它吗?

如果它是相关的,解决它的最佳方法是什么?

批评警告不是上帝的话语。它们只是对一些情况的警告,如果管理不当,可能会给你带来麻烦。

该Perlcritic违规是否与%ENV的分配相关,或者我可以忽略它吗?

此警告告诉您:

  1. 全局变量在一定距离内具有非常真实的作用可能性
  2. 当处理那些改变内置函数操作的变量时,这种可能性甚至更危险

这与%ENV相关吗?如果您在程序中生成多个子进程,请选择"是"。如果有人稍后更改您的程序以生成另一个孩子,请选择"是"。

如果它是相关的,解决它的最佳方法是什么?

这就是作为人变得重要的地方。你需要做出价值判断。

可能的操作:

  • 忽略这个警告,希望未来的维护人员不会被你使用这个全局变量所困扰
  • 更改代码以避免出现警告您的情况。choroba建议的语法是一个不错的选择

现在,如果你已经做出了改变,仍然收到警告,并且认为警告现在有错误,你可以做一个或多个:

  • 做一个好公民,提交一份错误报告
  • 在受影响的行上或在有问题的行之前的自己的行上使用注释## no critic (RequireLocalizedPunctuationVars)
  • 或者更过分地禁用该规则,或者只是在.perlcriticrc文件中为%ENV创建一个异常

您只能本地化给定环境变量的值:

local $ENV{VAR1} = 'value1';

考虑使用Env。perlcritic不抱怨变量:

use warnings;
use strict;
use Env qw(VAR);
$VAR = "value1";

最新更新