我不确定您打算如何处理qw
,但只要说@mass
永远不会使用 的内容就足够了。
@array = qw(hello world);
将导致@array
被定义为包含 2 个字符串,hello
和world
。它只是以下的简写:
@array = ('hello', 'world');
这就是为什么
@array=qw(@mass);
计算为('@mass')
- 具有 5 个字符的单个文字字符串的数组@mass
。
也许这就是你做错了。如果你尝试怎么办
@array = map { split /\s+/} @mass;
@mass
是行列表。每行有单词或只有字母,用空格分隔。最后一行所做的是将每一行映射到split /\s+/
- 这会将每一行拆分'ba ab a G'
为一个列表,('ba', 'ab', 'a', 'G')
并将@array
成为一个单词/字母列表。
然后就是你想如何对它们进行排序的问题。另请参阅其他答案。
哦,记得在写出文件时放回空格:
print $new (join " ", @mass1);
如果您希望每一行相互独立地排序,那也很容易:
$mass1 = join "\n", map { join " ", sort (split /\s+/) } @mass
读作“对于 中的每一行@mass
,在空间上拆分,排序并再次用空间连接回来”,并与结果数组一起,连接newline
以产生文件的输出。
请注意,您可以使用类似等sort
的比较器。sort { $a cmp $b }
如果您的文件太大,那么循环可能是谨慎的:
for my $mass (<$old>) {
my $sorted_line = join " ", sort (split /\s+/, $mass);
print $new "$sorted_line\n";
}