Это означает, что для строки формата требуется больше значений, чем содержится в @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;
(обратите внимание, что местное время без смещения часового пояса создает неоднозначные временные метки во время «возврата» к стандартному времени в областях с летним временем).