in reply to Trim blanks from the beginning and end of a multi-line string

Get rid of the /m, and it should work. The /m changes the meaning of ^ and $ to match at internal newlines. Which is what you do not want.

Replies are listed 'Best First'.
Re^2: Trim blanks from the beginning and end of a multi-line string
by AnomalousMonk (Archbishop) on Jan 29, 2012 at 17:35 UTC

    kenclark: Another approach to the problem is to say exactly what you want to do: trim all whitespace at the absolute beginning  \A or at the absolute end  \z of the string. This avoids any confusion with the various meanings of the  ^ $ metacharacters. With a PBP-style substitution regex:

    >perl -wMstrict -le "my $para = qq{\n\n \t \nsentence 1\nsentence 2\n\nsentence 3\n\n \t\n}; print qq{[[$para]]}; ;; $para =~ s{ \A \s+ | \s+ \z }{}xmsg; print qq{[[$para]]}; " [[ sentence 1 sentence 2 sentence 3 ]] [[sentence 1 sentence 2 sentence 3]]
      s{ \A \s+ | \s+ \z }{}xmsg;
      I don't think this deserves any price for clearity.

      You're using /m and /s while you aren't using any construct for which this is relevant. This just leads to more people like the OP who will think that using /m and /s is a good idea, without understanding their meaning. And then use it at the wrong time. Furthermore, I don't see the point of /g. It's just an artificial way of putting two constructs into one. The /x j u s t  m a k e s  i t  l i k e  y o u r  r e g e x p  s u f f e r s  f r o m  b a d  k e r n i n g .

      I'd write it as:

      $str =~ s/^\n+//; $str =~ s/\n+$//;
      if only because it's idiomatic.
        ... this ...

        "This", of course, follows the Perl Best Practices (PBP) regex recommendations of TheDamian, which I have said in the past I find compelling.

        This just leads to more people like the OP who will think that using /m and /s is a good idea, without understanding their meaning. And then use it at the wrong time.

        But the point of always using /m and /s is that the  ^ $ . operators always behave in the same way and so are more easily understood in the first place. If better understood, it is less likely there will be a "wrong time" or wrong context in which these operators will be used (if it is appropriate to use them at all).

        ... I don't see the point of /g. It's just an artificial way of putting two constructs into one. ... I'd write it as ...

        But the way you would write it could be described as "an artificial way of putting one construct into two." And what but artifice is our beloved Art of Programming? (Or is it the beloved Art of Sausage Making? Either way, still artifice.)

        The /x ...

        PBP has a separate discussion of the rationale for this. Tedious to retail it here. Update: Although I will say that, as I grow older, my tired eyes thirst for whitespace as a wanderer in a desert thirsts for cool, sweet water.

        You, JavaFan, and others, notably BrowserUk, have advanced many strongly argued disagreements with the PBP recommendations in general and with the regex recommendations in particular. Of course, I accept your choices while asserting my right to my own. As a great man once said, "These are my principles. If you don't like them, I've got others."

      Terrific. Thank you.
Re^2: Trim blanks from the beginning and end of a multi-line string
by kenclark (Novice) on Jan 29, 2012 at 15:16 UTC
    Perfect. That did the trick. Thank you.