我正在寻找一个 100% 可靠的解决方案,不依赖于输入或环境或任何东西 - 我只想 100% 确定地使标量变量受到污染:-)
问问题
106 次
1 回答
1
我不主张完美的可靠性。应该始终创建测试以确保代码在每个新系统上都按预期工作。
但是,如果您打开标量引用的文件句柄,则readline的结果似乎受到污染:
#!/usr/bin/env perl -T
use strict;
use warnings;
use Scalar::Util qw(tainted);
my $var = 0.13;
print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n";
$var = taint_string($var);
print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n";
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
于 2014-10-25T15:44:18.487 回答