4
Perl的明显行为是根据受污染的条件来污染分支修剪后的分支中的常量。这是记录的吗?在未修剪的分支中检测常量
此输出1
:
bash$ T="" perl -Tle '
use constant T=>$ENV{T};
use Scalar::Util qw/tainted/;
exit if T;
print tainted(0)'
这似乎是不变0
受到了污染,因为退出后一切(在原来的问题,这是一个回报率)是在保持后剪枝具有基于发生分支在受污染的情况下。这恰好是Perl的污点模式的一个非常漂亮的功能,但我无法在任何地方找到它的文档。当未设置$ENV{T}
或条件处于动态访问$ENV{T}
时,常量不受污染。
顺便说一句,我现在知道的最好的答案是相关的隐含的实际软件开发问题,从这个问题出现,如何在开发时关闭一段模式的perl源而没有污染我的常量,就是设置你的不变的常数,而不是一个受污染的环境变量,像这样:
use constant DEBUG_MODE => ($ENV{DEV_DEBUG} ? 1 : 0);
这可以是固定的后5.22 https://rt.perl.org/Public/Bug/Display.html?id=122669 – 2015-10-29 15:31:23