如何在perl中的printf函数中集中证明

Qia*_* Li 5 perl

我知道printf函数默认使用右对齐.-将使它成为合理的.但它是否有可能使其集中证明格式?

非常感谢.

Sam*_*kri 6

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)


Dav*_* W. 5

printf功能无法居中文本.

然而,有一个非常古老,几乎被遗忘的机制可以做到这一点.您可以在Perl中创建格式语句,告诉write语句如何打印.通过使用格式和写入,您可以居中对齐文本.

这在1989年的Perl 3.x时代就已经完成了,但在Perl 4出现之前就被抛弃了.Perl 5具有更强大的变量范围,因此使用格式会产生压缩,因为使用它们会违反Perl 5喜欢范围变量的方式(格式本质上是全局的).

您可以通过查看了解更多相关信息perldoc perlform.我好像多年没见过它们了.

  • 是的,不是.`format`和`write`从第1天开始就是Perl的一部分,早在1987年就已经在perl1中完全成型了.是的,我记得,但我也保留了perl {1,2,3,4}我的系统上的联机帮助页(好的,完整的源代码),所以很容易检查.我喜欢格式很多,但仍然经常使用它们.我不认为词法是格式的大问题.你只需要处理事情,或在词法范围内声明格式.我通常会创建一个我调用的函数,比如说`swrite()`.最近我用`Unicode :: Linebreak`做了很酷的事情. (2认同)