如何强制perl变量始终受到污染



我正在寻找一个100%可靠的解决方案,不依赖于输入或环境或任何东西-我只想100%-确定地使标量变量受到污染:-)

我不主张完美的可靠性。应该始终创建测试,以确保代码在每个新系统上按预期工作。

但是,如果打开标量引用的文件句柄,则读取行的结果似乎受到了污染:

#!/usr/bin/env perl -T
use strict;
use warnings;
use Scalar::Util qw(tainted);
my $var = 0.13;
print tainted($var) ? "Yes, tainted: $varn" : "Nope, all clean: $varn";
$var = taint_string($var);
print tainted($var) ? "Yes, tainted: $varn" : "Nope, all clean: $varn";
sub taint_string {
    my $value = shift;
    warn "Not going to work on references" if ref $value;
    open my $fh, '<', $value or die "Can't open: $!";
    local $/;    # Slurp
    return <$fh>;
}

输出:

Nope, all clean: 0.13
Yes, tainted: 0.13

最新更新