Change the benchmark code a bit:
use List::Util qw(max);
sub assignmax {
(sort { $b<=>$a } @_)[0];
}
sub assignmax5 {
(sort @_)[-1];
}
sub assignmax2 {
$_[0] > $_[1] ? $_[0] : $_[1];
}
sub assignmax3 {
max(@_);
}
sub assignmax4 {
my $a;
for (@_) {
$a = $_ if $_ > $a;
}
$a;
}
@r = map {int rand 1000}(0..1);
use Benchmark qw(cmpthese);
cmpthese -1,{
'sort' => sub {assignmax(@r)},
'sort2' => sub {assignmax5(@r)},
'ternary' => sub {assignmax2(@r)},
'List' => sub {assignmax3(@r)},
'loop' => sub {assignmax4(@r)},
};
And the results look quite different:
Rate loop sort2 sort List ternary
loop 105412/s -- -27% -27% -61% -72%
sort2 143479/s 36% -- -1% -47% -62%
sort 144807/s 37% 1% -- -46% -62%
List 270490/s 157% 89% 87% -- -29%
ternary 381869/s 262% 166% 164% 41% --