http://www.perlmonks.org?node_id=782078


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

Your solutions are very broken.

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!

Replies are listed 'Best First'.
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?