这表示格式字符串需要的值多于包含的值@data
.
$ perl -we'my @data = qw( a b c ); printf "%s %s %s\n", @data;'
a b c
$ perl -we'my @data = qw( a b ); printf "%s %s %s\n", @data;'
Missing argument in printf at -e line 1.
a b
在您的例子中,格式字符串有 15 个占位符,但是@data
包含少于 15 个元素。
根据您的评论,我认为您想要
printf $format, $Y, $m, $d, $H, $M, $S, @data;
也可以写成如下:
my $ts = sprintf("%04-%02d-%02d %02d:%02d:%02d", $Y, $m, $d, $H, $M, $S);
my $format = "%s".( " %7.2f" x 9 )."\n";
printf $format, $ts, @data;
大多数时候,您将从纪元时间戳开始(由time()
)。在这种情况下,可以使用以下内容:
use POSIX qw( strftime );
my $ts = strftime("%Y-%m-%d %H:%M:%S", localtime(time()));
my $format = "%s".( " %7.2f" x 9 )."\n";
printf $format, $ts, @data;
(请注意,在夏令时地区“回退”到标准时间期间,没有时区偏移的本地时间会产生不明确的时间戳。)