有人可以帮我处理perl中的列排序代码

时间:2014-10-06 23:15:05

标签: perl sorting

我正在学习perl并希望对文件中的列进行排序。我在网上找到了这个代码。

my @array = ( 
   "kyy1         x753y420 31082010 07:01:11", 
   "exr1         x831y444 31082010 07:43:45", 
   "eef1         x717y532 31082010 07:30:17", 
   "bab3         x789y486 31082010 08:08:56", 
   "sam1        x1017y200 31082010 07:25:18", 
   "jmd2         x789y466 31082010 07:38:22", 
   "baa3cqc      x720y440 31082010 07:26:37"
);

# Sort by first column - login name
my @sortedName = sort { (split ' ', $a)[0] cmp (split ' ', $b)[0] } @array;

# Sort by second column - SKU number
my @sortedSkno = sort { (split ' ', $a)[1] cmp (split ' ', $b)[1] } @array;

# Sort by third - date - and fourth - time - column combined!
my @sortedTime = sort { (split ' ', $a)[2].(split ' ', $a)[3] cmp (split ' ', $b)[2].(split ' ', $b)[3] } @array;

print "Array\n";
print join( "\n", @array )."\n\n";

print "Sort Name\n";
print join( "\n", @sortedName )."\n\n";

print "Sort Skno\n";
print join( "\n", @sortedSkno )."\n\n";

print "Sort Date\n";
print join( "\n", @sortedTime )."\n\n";

但我完全不了解以下内容

# Sort by first column - login name
my @sortedName = sort { (split ' ', $a)[0] cmp (split ' ', $b)[0] } @array;

我不能得到的是,sort函数有两个参数(split ' ', $a)[0](split ' ', $b)[0]。这些代表sort函数使用的特殊变量$a$b。如果这是真的,那么分割函数如何再次$a再次(split ' ', $a)[0]!?

1 个答案:

答案 0 :(得分:0)

以下修改理解得更好。与

相同
my @sortedName=sort { (split ' ', $a)[0] cmp (split ' ', $b)[0] } @array 

但更具可读性。这是修改

 my @sortedName=sort{ @arr_a=split(' ',$a);
        @arr_b=split(' ',$b);
        @arr_a[0] cmp @arr_b[0];
      }(@array);

这里读取@array,列表中的两个参数或元素保存在$ a和$ b中。然后使用空格分割它们并存储在@ arr_a,@ arr_b中。然后我们只比较第0个元素并进行排序。