my @lines = (
"It is true that printf and sprintf",
"do not have a conversion to center-justify text.",
"However, you can achieve the same effect",
"by padding left-justified text",
"with an appropriate number of spaces."
);
my $max_length = 0;
foreach my $line (@lines) {
$max_length = (length $line > $max_length) ? length $line : $max_length;
}
foreach my $line (@lines) {
printf "%s%-${max_length}s\n", ' ' x int(($max_length - length $line)/2), $line;
}
Run Code Online (Sandbox Code Playgroud)
该printf
功能无法居中文本.
然而,有一个非常古老,几乎被遗忘的机制可以做到这一点.您可以在Perl中创建格式语句,告诉write语句如何打印.通过使用格式和写入,您可以居中对齐文本.
这在1989年的Perl 3.x时代就已经完成了,但在Perl 4出现之前就被抛弃了.Perl 5具有更强大的变量范围,因此使用格式会产生压缩,因为使用它们会违反Perl 5喜欢范围变量的方式(格式本质上是全局的).
您可以通过查看了解更多相关信息perldoc perlform
.我好像多年没见过它们了.