use strict; my @list = qw/ box cow dog apple ant/; # A "normal" use of sort my @sorted = sort {$a cmp $b} @list; print join (',', @sorted), "\n"; #return the sort sub and count in a list sub mcc { my $count = 0; return (sub {$count++; $_[0] cmp $_[1] }, $count); } # why can't I say something like mcc()[0] ??? print join ',',sort { &{(mcc())[0]}($a,$b) } @list;