Почему Perl не "сортирует" эти хэш-ключи в числовом порядке?

#!/usr/bin/perl
use strict;
use warnings;

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

когда я выполняю приведенный выше код, результат выглядит следующим образом:

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

Я ожидаю, что" 10: 10 " будет последним, который будет напечатан. Мне просто нужно, чтобы кто-то объяснил, почему Perl дает мне сюрприз в этом случае.

2 ответов


sort всегда по умолчанию для сравнения строк.

Если вы хотите числовую сортировку, вы должны быть явными.

sort {$a <=> $b} (keys %hash)

Не забывайте, что ключи в хэше Perl всегда хранятся в виде строк, поэтому вывод делает смысла.