在printf中插入数组元素的正确方法



在学习Schwartz的 Perl时,我遇到了一个练习,我应该接受一些用户输入字符串,其中第一个输入是决定其他字符串右对齐输出的宽度。

也就是说,输入:

10
apple
boy

输出应该是:

       10
    apple
      boy

,输出右对齐10。

我尝试使用数组来解决这个问题:

#!/usr/bin/perl
use strict;
use warnings;
my @array;
while (<>) {
    chomp($_);
    push @array, $_ ;
}
while (@array) {
    printf ("%$array[0]s n", shift @array);
}

但是在正确格式化和打印'10'之后,我得到错误:

$ perl test.pl 
10
apple
boy
        10 
Invalid conversion in printf: "%a" at test.pl line 11, <> line 3.
%apples 
Argument "boy" isn't numeric in printf at test.pl line 11, <> line 3.
0oys 

我尝试了各种方法通过将数组元素括在括号中来强制插值,但所有这些都导致了错误。在printf中插入数组元素的正确方法是什么(如果这是正确的术语)?

这里有一种更通俗的书写方式,可以避免执行显式的shift。因为格式控制变量从一开始就不是@array的一部分,所以它更像我的意思:

use strict;
use warnings;
my ( $length, @array ) = <>;
chomp( $length, @array );
printf "%${length}sn", $_ for ( $length, @array );

最新更新