#!/usr/bin/perl -w use strict; my @l = (2, 4, 19, 3, 15, 30, 1, 31, 14); print sort {&{bysort("up")}} @l; print $/; print sort {&{bysort("dn")}} @l; print $/; sub bysort { my $by = shift; if ($by eq "up") { return sub { $a <=> $b }; } elsif ($by eq "dn") { return sub { $b <=> $a }; } else { return sub { $a cmp $b }; } }