当你说:
push @array, $line;
您正在创建一个等于该行的一个值的数组。
$array[0] = "A B C D";
当你说:
@array = reverse @array;
您正在反转该单个成员数组。第一个元素成为最后一个元素,最后一个元素成为第一个元素,等等。但是,你只有一个元素,所以没有什么可以反转的。
你想要做的是用你的行创建一个数组:
my @array = split /\s+/, $line;
这将创建一个数组,其中每个字符都是数组的一个单独元素。例如,您的第一行:
$array[0] = "A";
$array[1] = "B";
$array[2] = "C";
$array[3] = "D";
现在,如果你reverse
在这个数组上使用,你会得到:
$array[0] = "D";
$array[1] = "C";
$array[2] = "B";
$array[3] = "A";
这是程序:
use strict;
use warnings;
use feature qw(say);
while ( my $line = <> ) {
chomp $line;
my @array = split /\s+/, $line;
say join " ", reverse $line;
}
该join
函数采用一个数组,并将每个元素连接成一行 - 从而重建您的行。
顺便说一句,我可以这样做:
@array = reverse @array;
say "@array"; #Quotes are important!
这是因为 Perl 会自动加入一个包含任何字符的数组$"
。这是一个 Perl 变量,当数组放在引号中时用于连接数组,默认值为单个空格。
就个人而言,我更喜欢say join " ", reverse $line;
. 发生了什么更明显,并且不依赖于很少使用的变量的值。