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