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

时间:2014-05-24 18:03:27

标签: arrays perl string-interpolation

在研究Schwartz的 Learning 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);
}

但在格式化和打印之后&#39; 10&#39;没错,我收到错误:

$ 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中字符串插入数组元素的正确方法(如果这是正确的术语)?

1 个答案:

答案 0 :(得分:2)

这是一种更为Perlish的编写方法,可以避免执行显式的shift。因为格式控制变量从一开始就不是@array的一部分,所以我的意思更多 -

use strict;
use warnings;

my ( $length, @array ) = <>;
chomp( $length, @array );

printf "%${length}s\n", $_ for ( $length, @array );