Rate substr_it unpack_it
substr_it 2341/s -- -47%
unpack_it 4384/s 87% --
Results tally
####
#! perl -slw
use strict;
use vars qw[$line @s @s2 @u1 @u2];
use Benchmark qw[cmpthese];
$line = (join'','a' .. 'y') x 40;
sub substr_it{
my @bits;
push @bits, substr $_[0], 413, 30;
push @bits, substr $_[0], 373, 30;
push @bits, substr $_[0], 343, 30;
push @bits, substr $_[0], 245, 15;
push @bits, substr $_[0], 679, 30;
push @bits, substr $_[0], 10, 10;
push @bits, substr $_[0], 900, 100;
push @bits, substr $_[0], 500, 2;
push @bits, substr $_[0], 313, 30;
push @bits, substr $_[0], 844, 44;
push @bits, substr $_[0], 111, 1;
push @bits, substr $_[0], 100, 100;
push @bits, substr $_[0], 454, 30;
push @bits, substr $_[0], 240, 3;
push @bits, substr $_[0], 236, 4;
@bits;
}
sub unpack_it{
my $fmt = '@413A30 @373A30 @343A30 @245A15 @679A30 @10A10 @900A100'
. '@500A2 @313A30 @844A44 @111A1 @100A100 @454A30 @240A3 @236A4';
unpack( $fmt, $_[0]);
}
cmpthese( -3, {
substr_it => '@s = substr_it $line;',
unpack_it => '@u1 = unpack_it $line;',
});
print 'Results tally';
__END__
C:\test>226666
Benchmark:
running
substr_it, unpack_it
, each for at least 3 CPU seconds
...
substr_it: 4 wallclock secs ( 3.01 usr + 0.00 sys = 3.01 CPU) @ 2340.74/s (n=7055)
unpack_it: 3 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 4383.55/s (n=13646)
Rate substr_it unpack_it
substr_it 2341/s -- -47%
unpack_it 4384/s 87% --
Results tally
C:\test>
####
sub substr_it{
( substr( $_[0], 413, 30),
, substr( $_[0], 373, 30),
, substr( $_[0], 343, 30),
, substr( $_[0], 245, 15),
, substr( $_[0], 679, 30),
, substr( $_[0], 10, 10),
, substr( $_[0], 900, 100),
, substr( $_[0], 500, 2),
, substr( $_[0], 313, 30),
, substr( $_[0], 844, 44),
, substr( $_[0], 111, 1),
, substr( $_[0], 100, 100),
, substr( $_[0], 454, 30),
, substr( $_[0], 240, 3),
, substr( $_[0], 236, 4),
);
}
####
Rate substr_it unpack_it
substr_it 3836/s -- -14%
unpack_it 4460/s 16% --
Results tally
####
use constant FORMAT =>
'@413A30 @373A30 @343A30 @245A15 @679A30 @10A10 @900A100 @500A2
. @313A30 @844A44 @111A1 @100A100 @454A30 @240A3 @236A4';
sub unpack_it{
unpack( FORMAT, $_[0]);
}
# gives
Rate substr_it unpack_it
substr_it 3821/s -- -16%
unpack_it 4575/s 20% --
Results tally