0
我正在學習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;
什麼我不明白的是,排序函數有兩個參數(split ' ', $a)[0]
和(split ' ', $b)[0]
。這些代表排序功能使用的特殊變量$a
和$b
。如果那是真的,那麼如何在(split ' ', $a)[0]
再次分裂功能$a
!?
'$ a'和'$ b'對應於數組中的元素。你可以在這裏閱讀它:http://perldoc.perl.org/functions/sort.html – chilemagic 2014-10-06 23:18:43
'$ a'和'$ b'確實是特殊變量,但你可以用各種方式轉換它們 - 例如。將它們拆分並使用結果數組中的某個元素進行排序。 – 2014-10-06 23:26:51
好的。兩個問題。1)如果在具有say(1,2,3)的數組上使用sort,$ a需要1,$ b需要2?那麼3什麼時候進入圖片。 2)任何人都可以簡單地解釋我在sort {(split'',$ a)[0] cmp(split'',$ b)[0]} @array)執行時概念上發生了什麼。 – Curious 2014-10-07 00:36:04