2010-03-09 118 views
8
#!/usr/bin/perl 
use strict; 
use warnings; 

my %hash; 
foreach (1 .. 10) { 
    $hash{$_} = $_; 
} 
foreach (sort(keys %hash)) { 
    print $_ . ": " . "$hash{$_}" . "\n" ; 
} 

當我執行上面的代碼,其結果是,如下:爲什麼Perl的「排序」將這些散列鍵按數字順序排列?

 
1: 1 
10: 10 
2: 2 
3: 3 
4: 4 
5: 5 
6: 6 
7: 7 
8: 8 
9: 9 

我期望「10:10」是指被打印的最後一個。我只需要有人解釋爲什麼Perl在這種情況下給我一個驚喜。

+6

鍵1..10的散列稱爲數組。 – jrockway 2010-03-09 13:14:27

回答

-3

不要忘記,在一個Perl哈希鍵爲字符串所以輸出確實有意義總是存儲。

+6

Perl將它們存儲爲字符串_and_和數字。這裏的問題是,默認情況下排序字符串。 – mirod 2010-03-09 13:07:25

+0

散列的鍵被存儲爲字符串,但即使它們被存儲爲數字「sort」,仍然使用字符串比較進行排序。 – 2010-03-09 16:01:32

+0

哈希鍵不是SV,所以它們與普通的Perl標量沒有相同的魔力。這就是爲什麼,例如,你可以通過使用它們作爲散列鍵並使用keys()讓它們返回來將字符串進行復制。 – 2011-08-03 05:05:36