在学习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 );