I'm curious which comparison routines get optimized.
No block, $a <=> $b, $b <=> $a,
$a cmp $b and $b cmp $a.
I don't see why you'd be surprised that creating a single hash would be faster than creating a ton of tiny anonymous arrays.
No lookup would even be faster. With a GRT you don't use block with sort, and hence, no array or hash lookup.
use Benchmark "cmpthese";
our @files = glob "/bin/*";
our (@o, @s, @g);
cmpthese -1 => {
ordinary => '@o = sort {-s $a <=> -s $b} @files',
st => '@s = map $_ -> [0],
sort {$a -> [1] <=> $b -> [1]}
map [$_ => -s], @files',
grt => '@g = map substr ($_, 8),
sort
map sprintf ("%08d%s", -s, $_), @files',
};
die unless "@o" eq "@s" && "@o" eq "@g";
__END__
Rate ordinary st grt
ordinary 684/s -- -54% -63%
st 1492/s 118% -- -20%
grt 1864/s 172% 25% --
-
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.
|