printf FILEHANDLE FORMAT, LIST
printf FILEHANDLE
printf FORMAT, LIST
printf

等效于 print FILEHANDLE sprintf(FORMAT, LIST),除了不会追加 $\(输出记录分隔符)。FORMAT 和 LIST 实际上被解析为单个列表。列表的第一个参数将被解释为 printf 格式。这意味着 printf(@_) 将使用 $_[0] 作为格式。有关格式参数的说明,请参见 sprintf。如果 use locale(包括 use locale ':not_characters')生效并且 POSIX::setlocale 已被调用,则格式化浮点数中使用的十进制分隔符将受 LC_NUMERIC 本地化设置的影响。请参见 perllocalePOSIX

出于历史原因,如果您省略列表,则使用 $_ 作为格式;要使用没有列表的 FILEHANDLE,您必须使用裸字文件句柄,例如 FH,而不是间接句柄,例如 $fh。但是,这很少能达到您想要的效果;如果 $_ 包含格式代码,它们将被替换为空字符串,并且如果启用了 警告,则会发出警告。如果您想打印 $_ 的内容,只需使用 print 即可。

不要陷入使用 printf 的陷阱,而简单的 print 就可以做到。 print 更有效率,并且错误更少。