2015-03-30 27 views
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); 
+0

这可以是固定的后5.22 https://rt.perl.org/Public/Bug/Display.html?id=122669 – 2015-10-29 15:31:23

回答

0

最好的答案,我知道在这个时候从这个问题就会出现相关的暗示实际的软件开发问题,我如何在开发时关闭一段污染模式的Perl源代码,而不会污染我的常量,是,设置你的常量为恒定的,而不是一个被感染的环境变量,像这样:

use constant DEBUG_MODE => ($ENV{DEV_DEBUG} ? 1 : 0);