Perl排序在数值上没有按预期工作

mj6*_*174 2 sorting perl

我对此感到困惑,显然遗漏了一些基本的东西.似乎perl sort不适用于特定的值集.以下是测试代码的一部分:

    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";
Run Code Online (Sandbox Code Playgroud)

如您所见,它在输入值为(7:8:4)时有效.当值(23:24:7)时似乎不起作用!

before:7:8:4
after:4:7:8
######################################
before:23:24:7
after:23:24:7
######################################
Run Code Online (Sandbox Code Playgroud)

moo*_*dow 12

默认情况下,sort将按词汇排序.所以23和24在7之前出现的原因与bc和bd在字典中的g之前相同.

sort {$a <=> $b} @p 将产生数字排序.

http://perldoc.perl.org/functions/sort.html了解更多信息.