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 :(得分:0)
我目前所知道的最佳答案是出现这个问题的相关隐含的实际软件开发问题,如何在开发时关闭一部分污点模式perl源而不会污染我的常量,是的,设置你的常量变为常数而不是受污染的环境变量,如下所示:
use constant DEBUG_MODE => ( $ENV{DEV_DEBUG} ? 1 : 0 );