Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Specify sort method on the fly

by eric256 (Parson)
on Jan 20, 2010 at 22:44 UTC ( [id://818579] : note . print w/replies, xml ) Need Help??

in reply to Specify sort method on the fly

If you use a hash to hold different sort functions, then you can call that function from inside the sort block. There are probably better ways to do this, but this works.

#!/usr/bin/perl use strict; use warnings; my $test = shift; my $sort = { 'numbers' => sub { $_[0] <=> $_[1] }, 'letters' => sub { "$_[0]" cmp "$_[1]" }, }; my @test = qw/1 2 3 4 a b 0 10 9 100/; print sort {$sort->{$test}->($a,$b)} @test;

If you run this perl letters it will use the cmp and if you run perl numbers it will sort using <=>

Eric Hodges

Replies are listed 'Best First'.
Re^2: Specify sort method on the fly
by ikegami (Patriarch) on Jan 20, 2010 at 23:29 UTC
    my $sort = { };? my %sort = ( );!

      I tend to use references always, dunno why, habit i suppose. I like the way they look?

      Eric Hodges

        I go for references too. Couple of justifications:

        Since I almost always want to pass by reference to avoid copying, and often want to pass in multiple arrays or hashes, having a reference is a good default.
        Not having non-reffed arrays and hashes floating around means more consistency in the use of $ and -> almost everywhere.