Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^2: Using the Substr

by AnomalousMonk (Archbishop)
on Mar 04, 2014 at 23:06 UTC ( [id://1077000]=note: print w/replies, xml ) Need Help??


in reply to Re: Using the Substr
in thread Using the Substr

The advantage of limited over unlimited split is more pronounced if a redundant subroutine call and lexical creation are not included, with regex extraction thrown in for good measure:

c:\@Work\Perl>perl -wMstrict -le "use Benchmark qw/cmpthese/; ;; my $string = '1:13:1:6:5854:0x00E37F06:0x00D1314C'; my $result; ;; sub _split { $result = join ':', (split /:/, $string)[0 .. 2]; } ;; sub _split_LIMIT { $result = join ':', (split /:/, $string, 4)[0 .. 2]; } ;; sub _regex { ($result) = $string =~ m{ \A \d+ : \d+ : \d+ }xmsg; } ;; cmpthese(-5, { _split => \&_split, _split_LIMIT => \&_split_LIMIT, _regex => \&_regex, }); " Rate _split _split_LIMIT _regex _split 261407/s -- -39% -54% _split_LIMIT 425387/s 63% -- -24% _regex 562521/s 115% 32% --

Replies are listed 'Best First'.
Re^3: Using the Substr
by johngg (Canon) on Mar 05, 2014 at 11:23 UTC

    I wondered if index and substr would be any quicker but, no, it came in a bit behind &_split_LIMIT.

    use strict; use warnings; use Benchmark qw{ cmpthese }; my $string = q{1:13:1:6:5854:0x00E37F06:0x00D1314C}; my $result; sub _index { my $pos3 = -1; $pos3 = index $string, q{:}, $pos3 + 1 for 1 .. 3; $result = substr $string, 0, $pos3; } sub _split { $result = join ':', (split /:/, $string)[0 .. 2]; } sub _split_LIMIT { $result = join ':', (split /:/, $string, 4)[0 .. 2]; } sub _regex { ($result) = $string =~ m{ \A \d+ : \d+ : \d+ }xmsg; } cmpthese( -5, { _index => \&_index, _split => \&_split, _split_LIMIT => \&_split_LIMIT, _regex => \&_regex, } );
    Rate _split _index _split_LIMIT _r +egex _split 657900/s -- -26% -31% +-38% _index 890097/s 35% -- -7% +-17% _split_LIMIT 952857/s 45% 7% -- +-11% _regex 1066336/s 62% 20% 12% + --

    I hope this is of interest.

    Cheers,

    JohnGG

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1077000]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (3)
As of 2024-04-25 23:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found