Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何根据行长(包括空格)对文件进行排序_Perl_File_Sorting - Fatal编程技术网

Perl 如何根据行长(包括空格)对文件进行排序

Perl 如何根据行长(包括空格)对文件进行排序,perl,file,sorting,Perl,File,Sorting,我正在尝试根据行长度对文件排序: 我叫蒂姆 我非常喜欢菠萝 嗨 像这样的事情 你好 我叫蒂姆 我非常喜欢菠萝 我也必须在其中包含空格,所以我尝试将每一行作为数组中的一行=1字符串放入数组中。然后我尝试对数组进行排序,但结果不太理想 这(来自一个现有的“重复”答案): perl-ne'push@a,$\;结束{打印排序{length$a length$b}@a}'文件 这是: #!/usr/bin/env perl use warnings; use strict; my @arr; sub

我正在尝试根据行长度对文件排序:

我叫蒂姆
我非常喜欢菠萝

像这样的事情

你好
我叫蒂姆
我非常喜欢菠萝

我也必须在其中包含空格,所以我尝试将每一行作为数组中的一行=1字符串放入数组中。然后我尝试对数组进行排序,但结果不太理想

这(来自一个现有的“重复”答案):

perl-ne'push@a,$\;结束{打印排序{length$a length$b}@a}'文件
这是:

#!/usr/bin/env perl

use warnings;
use strict;
my @arr;

sub compareLength
{
        length $::a <=> length $::b;
}

while (<>)
{
        push @arr, "$_";
}
print (sort {compareLength} @arr);
#/usr/bin/env perl
使用警告;
严格使用;
我的@arr;
子比较长度
{
长度$::a长度$::b;
}
而()
{
按@arr,“$”;
}
打印(排序{comparelelength}@arr);
基本上都是一样的
-n
创建
while()
END
将内容放在后面,比较函数是匿名(vs named)和内联的。(但它仍然存在,仍然是一个子程序)

哦,我把
@a
改名为
@arr
,因为我不喜欢两个不同的变量,都叫
a
@a
$a


我希望这会有所帮助。

使用字符串长度函数作为排序函数的比较步骤。(底部附近有一个perl解决方案)@DaveS我对此感到困惑,你能再深入一点吗detail@zzxyz你说的是一行中有perl的东西吗?@yibs或Yes不需要所有的
push
ing☺
perl-e'print sort{length$a length$b}文件
@haukex-是的,我故意选择了一个更显式的?解决方案显然,速度也很慢,我想这是有道理的。
#!/usr/bin/env perl

use warnings;
use strict;
my @arr;

sub compareLength
{
        length $::a <=> length $::b;
}

while (<>)
{
        push @arr, "$_";
}
print (sort {compareLength} @arr);