perl

sort <=>and cmp

Perlhas two operators<=>andcmp,

which are veryuseful when wishing to sort arrays.$a<=> $breturns -1 if$ais numerically lesser than$b, 1 if it's greater, and zeroif they are equal.

cmpdoes the same for string comparison.For instance the previous example could be re-writtenas:

[liuguiyou@localhost perl]$ cat sort.pl #!/usr/bin/perl use strict; use warnings; my @array = (100,5,8,92,-7,34,29,58,8,10,24); my @sorted_array = sort { $a <=> $b } @array; print join("<", @sorted_array), "\n"; [liuguiyou@localhost perl]$ ./sort.pl -7<5<8<8<10<24<29<34<58<92<100  

Muchmore civil, isn't it? The following example, sorts an array ofstrings in reverse:

[liuguiyou@localhost perl]$ cat sort_chara.pl

#!/usr/bin/perl



use strict;

use warnings;



my @input = (

    "Hello World!",

    "You is all I need.",

    "To be or not to be",

    "There's more than one way to do it.",

    "Absolutely Fabulous",

    "Ci vis pacem, para belum",

    "Give me liberty or give me death.",

    "Linux - Because software problems should not cost money",

);



# Do a case-insensitive sort

my @sorted = sort { lc($a) cmp lc($b); } @input;



print join("\n", @sorted), "\n";





[liuguiyou@localhost perl]$ ./sort_chara.pl

Absolutely Fabulous

Ci vis pacem, para belum

Give me liberty or give me death.

Hello World!

Linux - Because software problems should not cost money

There's more than one way to do it.

To be or not to be

You is all I need.