2013-08-27 112 views
2

我被這個難住了,顯然缺少一些基本的東西。看來perl排序並不適用於特定的一組值。下面是測試代碼部分:Perl排序不像預期的那樣在數值上工作

use strict; 

    my $i = 7; 
    my $j = 8; 
    my $k = 4; 

    print "before:$i:$j:$k\n"; 
    my @p = ($i, $j, $k); 
    ($i, $j, $k) = sort(@p); 
    print "after:$i:$j:$k\n"; 

    print "######################################\n"; 


    my $i = 23; 
    my $j = 24; 
    my $k = 7; 

    print "before:$i:$j:$k\n"; 
    my @p = ($i, $j, $k); 
    ($i, $j, $k) = sort(@p); 
    print "after:$i:$j:$k\n"; 

print "######################################\n"; 

正如你可以看到,它工作時輸入值(7:8:4)。當值是(23:24:7)時似乎不起作用!

before:7:8:4 
after:4:7:8 
###################################### 
before:23:24:7 
after:23:24:7 
###################################### 
+0

將數組存儲回個別變量看起來有點奇怪,而不是在真實世界的程序中可能會做的事情。你可以直接打印數組:'print':@p \ n「' –

回答

12

默認情況下,sort將進行詞法排序。所以23和24出現在7之前,原因與bc和bd在字典中出現在g之前的原因相同。

sort {$a <=> $b} @p將產生數字排序。

http://perldoc.perl.org/functions/sort.html欲瞭解更多信息。

+0

感謝您的解釋和鏈接!現在正在工作。 – Mandar

+1

(字典使用特定於語言的整理順序,這與'sort'的默認值不同,你可以使用'Unicode :: Collat​​e'。) – ikegami

相關問題