我正在编写一个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的分配相关,或者我可以忽略它吗?
此警告告诉您:
- 全局变量在一定距离内具有非常真实的作用可能性
- 当处理那些改变内置函数操作的变量时,这种可能性甚至更危险
这与%ENV
相关吗?如果您在程序中生成多个子进程,请选择"是"。如果有人稍后更改您的程序以生成另一个孩子,请选择"是"。
如果它是相关的,解决它的最佳方法是什么?
这就是作为人变得重要的地方。你需要做出价值判断。
可能的操作:
- 忽略这个警告,希望未来的维护人员不会被你使用这个全局变量所困扰
- 更改代码以避免出现警告您的情况。choroba建议的语法是一个不错的选择
现在,如果你已经做出了改变,仍然收到警告,并且认为警告现在有错误,你可以做一个或多个:
- 做一个好公民,提交一份错误报告
- 在受影响的行上或在有问题的行之前的自己的行上使用注释
## no critic (RequireLocalizedPunctuationVars)
- 或者更过分地禁用该规则,或者只是在
.perlcriticrc
文件中为%ENV
创建一个异常
您只能本地化给定环境变量的值:
local $ENV{VAR1} = 'value1';
考虑使用Env。perlcritic
不抱怨变量:
use warnings;
use strict;
use Env qw(VAR);
$VAR = "value1";