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;