Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Re: Trimming whitespaces methods

by johngg (Canon)
on Jun 30, 2008 at 14:33 UTC ( #694746=note: print w/replies, xml ) Need Help??

in reply to Trimming whitespaces methods

My preference is to do the space trimming in two stages as it seems to be faster than either the capture or alternation methods.

use strict; use warnings; use Benchmark q{cmpthese}; my @arr = ( q{ fdsgehw fw wwfe w } ) x 5000; cmpthese( -5, { alternation => sub { my @new = @arr; s{ ^\s* | \s*$ }{}gx for @new; }, capture => sub { my @new = @arr; s{ ^\s* (\S.*?) \s*$ }{$1}x for @new; }, twoStage => sub { my @new = @arr; s{ ^\s* }{}x for @new; s{ \s*$ }{}x for @new; }, }, );

The results.

Rate capture alternation twoStage capture 8.96/s -- -26% -50% alternation 12.2/s 36% -- -33% twoStage 18.1/s 102% 48% --

I hope this is of interest.



Update: Fixed code indentation problems caused by TABs

Replies are listed 'Best First'.
Re^2: Trimming whitespaces methods
by lodin (Hermit) on Jun 30, 2008 at 17:02 UTC

    In order for the code to be truly equivalent the s modifier should be used on the substitution or a newline may break it.

    $_ = " foo\nbar "; s{ ^\s* (\S.*?) \s*$ }{$1}x; print "<$_>"; __END__ < foo bar >
    I assume you added the \S in the pattern as an improvement, but it should perhaps be noted that it has the effect of leaving a line of only whitespaces untouched, whereas the other ways don't.


      I assume you added the \S in the pattern as an improvement

      No, I think I must have put it in because I wasn't thinking straight :-(

      Well spotted!



Log In?

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2022-05-24 15:37 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (84 votes). Check out past polls.