2010-03-09 123 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