我有一个包含几行域名的文件,如下所示
yahoo.com
somesite.cc
mysite.net
voa.org
voa.co.aus
www.voa.org
google.com
我必须首先读取文件并按TLD(com,co,net等)排序,然后是域名(yahoo,google,voa等)和子域名(aus,in etc)。排序后我必须将它们保存在一个文件中。排序的文件输出应为
somesite.cc
voa.co.aus
voa.co.in
google.com
yahoo.com
mysite.net
voa.org
如果有人给我一个良好的开端,这将是伟大的。
由于
答案 0 :(得分:1)
您必须构建自定义sort
,如下所示:
use strict;
use warnings;
use List::Util qw(max);
chomp( my @data = <DATA> );
my @sorted = sort {
my ( $aa, $bb ) = map [ reverse split /\./ ], ( $a, $b );
( grep {$_}
map { ( $aa->[$_] // '' ) cmp ( $bb->[$_] // '' ) }
( 0 .. max( $#$aa, $#$bb ) )
)[0] // 0
} @data;
print "$_\n" for @sorted;
__DATA__
yahoo.com
somesite.cc
mysite.net
voa.org
voa.co.aus
www.voa.org
google.com
输出:
voa.co.aus
somesite.cc
google.com
yahoo.com
mysite.net
voa.org
www.voa.org