<=> and cmp

Contents | Up | Prev | Next

# 9.3.1. <=> and cmp

Perl has two operators `<=>` and `cmp`, which are very useful when wishing to sort arrays. `$a <=> $b` returns -1 if `$a` is numerically lesser than `$b`, 1 if its greater, and zero if they are equal.

`cmp` does the same for string comparison. For instance the previous example could be re-written as:

    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";

Much more civil, isn't it? The following example, sorts an array of strings in reverse:

    use strict;

    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($b) cmp lc($a); } @input);

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

Contents | Up | Prev | Next