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