尝试打印对象时,如下所示:
print "$response{_content} \n"; printf OUTPUT "$response{_content} \n";
这是一个间歇性的错误.只会偶尔发生一次,但这个程序需要100%可靠.宕.
它可以打印到STDOUT.
我究竟做错了什么? arrgh!
解决方法
printf的第一个参数被解释为输出格式,而不是输出本身.有关详细信息,请参见
perldoc -f printf和
man 3 printf.
问题是,printf可能偶尔会尝试写入其args(这甚至是C programs中几个漏洞的来源),例如:
perl -we 'printf "abc%n\n",$_; print "$_\n";'
如您所见,这将$_设置为3,这是在%n发生之前写入的字符数.尝试%n没有进一步的args,你会看到OP的确切错误信息.
长话短说:除非你真的需要高级格式化,否则请使用print.保留printf r / o的第一个参数,除非你真的需要更高级的格式化.