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% --
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|