2013-08-27 51 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

相关问题