我正在学习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]
!?
答案 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个元素并进行排序。