Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
Problems? Is your data what you think it is?
 
PerlMonks  

Re: How do I quickly strip blank space from the beginning/end of a string?

by ikegami (Pope)
on Jul 21, 2009 at 21:01 UTC ( #782078=note: print w/ replies, xml ) Need Help??


in reply to How do I quickly strip blank space from the beginning/end of a string?

Your solutions are very broken.

  • All of your solutions require the last non-space character to be an uppercase letter. You could say you're investigating a subset of the original question, except that your input has no uppercase letters. Use \s or a space instead of [^A-Z]. Use \S instead of [A-Z].

  • Some of your solutions have problems with trailing newlines due to the missing "s" modifier. /./ doesn't match newlines without it.

  • All but the last of your solutions don't work if the input is made entirely of spaces.

There's also a issue with your benchmark. Benchmarking code that removes trailing spaces when your input never has trailing spaces is odd. Include a case where the input has trailing spaces!


Comment on Re: How do I quickly strip blank space from the beginning/end of a string?
Select or Download Code
Re^2: How do I quickly strip blank space from the beginning/end of a string?
by blahblahblah (Priest) on Jul 21, 2009 at 22:25 UTC
    You're right, in my haste to get this question out there I made the jump from my original problem to japhy's post to talking about his benchmarks. One of my coworkers pointed out the same thing to me as I was headed out the door. Obviously I should be benchmarking the exact problem I want to solve, not some generally similar example. After I get the kids to bed I'll write a better benchmark and try your \K suggestion below too. Thanks.

    Also, you made the point that none of my input ends with spaces. I think that's generally true in real life usage too. It's frustrating that we have this pervasive idiom in our code of "strip whitespace just in case", but I think most of the time the input is already just fine. In fact, I think much of the time the input is short and has no spaces at all. I wonder if I should be checking it with index() first to quickly rule out that case.

    update: added paragraph spacing

      Also, you made the point that none of my input ends with spaces. I think that's generally true in real life usage too.

      Then shouldn't you be benchmarking space detection?

        Good point. I've tried the 3 methods below:
        if ($x =~ /\s/)
        and
        if (substr($x, -1) =~ /^\s/
        and
        if (rindex($x," ") == 0 || rindex($x,"\r") == 0 || rindex($x,"\n") == + 0 || rindex($x,"\t") == 0)
        The rindex method is much faster on the data that has spaces; otherwise the substr method is the fastest. Any other good ideas, keeping in mind that the data (I think) won't often contain any trailing spaces?

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2014-04-20 20:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (487 votes), past polls