in reply to Re: /s and /m don't seem to be doing anything
in thread /s and /m don't seem to be doing anything

Combining this with LanX's comment about metachars gives enlightenment:

my $re1=qr/foo$/; my $re2=qr/foo$/m; $,="\t"; $\="\n"; # just for output print tf(qr/$re1/), tf(qr/$re1/m); print tf(qr/$re1$/), tf(qr/$re1$/m); print tf(qr/$re2/), tf(qr/$re2/m); print tf(qr/$re2$/), tf(qr/$re2$/m); sub tf { "$_[0] ".("foo\nbar\n"=~$_[0]?"T":"F") } __END__ (?^:foo$) F (?^:foo$) F (?^:(?^:foo$)$) F (?^m:(?^:foo$)$) F (?^m:foo$) T (?^m:foo$) T (?^:(?^m:foo$)$) F (?^m:(?^m:foo$)$) T

i.e. the modifiers need to be on the regex which contains the metacharacters which they affect. Makes sense but I didn't catch it right away.

perlop says this:

If a precompiled pattern is embedded in a larger pattern then the effect of "msixpluad" will be propagated appropriately.

It's possible I've missed some other documentation, but I find this statement possibly a bit misleading, since "appropriately" could be taken to mean that, for example, qr/$re1/m should propagate /m into $re1, as the OP expected.

Replies are listed 'Best First'.
Re^3: /s and /m don't seem to be doing anything
by LanX (Saint) on Dec 31, 2014 at 04:54 UTC
    I can't test but I'm sure including $re as string w/o precompiling doesn't preserve any flags.

    Cheers Rolf

    (addicted to the Perl Programming Language and ☆☆☆☆ :)

      If a regex is defined in string form, then no regex modifiers are associated with it unless they happen to be explicitly embedded within the string using a  (?adlupimsx-imsx) or  (?adluimsx-imsx:pattern) construct (see Extended Patterns in perlre).

      c:\@Work\Perl\monks>perl -wMstrict -le "my $rs1 = '(?:(?-s).*)'; ;; my $rx1 = qr{ ($rs1) (.*) }xms; print qq{\$rx1: $rx1}; ;; qq{foo\nBAR} =~ m{ $rx1 }xms; print qq{from \$rx1: \$1 '$1' \$2 '$2'}; ;; my $rs2 = '(?:.*)'; ;; my $rx2 = qr{ ($rs2) (.*) }xms; print qq{\$rx2: $rx2}; ;; qq{wig\nWAG} =~ m{ $rx2 }xms; print qq{from \$rx2: \$1 '$1' \$2 '$2'}; " $rx1: (?^msx: ((?:(?-s).*)) (.*) ) from $rx1: $1 'foo' $2 ' BAR' $rx2: (?^msx: ((?:.*)) (.*) ) from $rx2: $1 'wig WAG' $2 ''


      Give a man a fish:  <%-(-(-(-<