my @output = sort @input; # default sort using eq to compare values my @output = sort {$a <=> $b} @input; # numeric sort my @output = sort some_func @input; # custom algorithm #### #!/usr/bin/perl -w use strict; my @input = (1..6); my $calls; my $fibcalls; my @output = sort reorder @input; # how many calls to fib() ? sub reorder { $calls++; return fib($a) <=> fib($b); } sub fib { my $val = shift; $fibcalls++; $val == 0 ? return $val: $val == 1 ? return $val : return fib($val - 1) + fib($val - 2); } print "called $calls times - fib calls $fibcalls\n"; #### cd /home/le6303/src/perl/ /usr/bin/perl -w "/home/le6303/src/perl/lister.pl" called 9 times - fib calls 150 #### #!/usr/bin/perl -w use strict; my @input = (1..6); my @output = my_map(\&double, @input); sub double { return 2 * shift; } sub my_map { my ($function, @values) = @_; my @results; foreach my $value (@values) { push @results, $function->($value); } return @results; } use Data::Dumper; print Dumper \@output;; #### cd /home/le6303/src/perl/ /usr/bin/perl -w "/home/le6303/src/perl/subber.pl" $VAR1 = [ 2, 4, 6, 8, 10, 12 ]; #### my @output = sort {$a <=> $b} map {fib($_)} @input; #### #!/usr/bin/perl -w use strict; my @input = (1..6); my $calls; my $fib_calls; my @output = sort {$calls++; $a <=> $b} map {fib($_)} @input; sub fib { my $val = shift; $fib_calls++; $val == 0 ? return $val: $val == 1 ? return $val : return fib($val - 1) + fib($val - 2); } print "called $calls times - fib $fib_calls\n"; use Data::Dumper; print Dumper(\@output); #### cd /home/le6303/src/perl/ /usr/bin/perl -w "/home/le6303/src/perl/lister.pl" called 9 times - fib 58 $VAR1 = [ 1, 1, 2, 3, 5, 8 ]; #### my @output = map {[$_, fib($_)]} @input; #### cd /home/le6303/src/perl/ /usr/bin/perl -w "/home/le6303/src/perl/lister.pl" $VAR1 = [ [ 1, 1 ], [ 2, 1 ], [ 3, 2 ], [ 4, 3 ], [ 5, 5 ], [ 6, 8 ] ]; #### my @output = map {$_->[0]} # extract just the original # value from the tuple sort {$a->[1] <=> $b->[1]} # sort based on the # computed value map {[$_, some_func($_)]} # create (value, computed) # tuples @input;