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

ultranerds has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm trying to work out why this regex isn't working as I'm expecting. I'm using the /m modifier to make it treat the data as "new lines" per row, but it seems to just keep looping through on the first one:
my $data = <<_DATA_; == Example header 1 == a f == Header 2 example ==== sub header a sub sub header :) == Testing header item with some stuff in [[fffsdfsdf]] _DATA_ while ($data =~ /^\=\= (.+?)$/m) { print "FOO: $1 \n"; }
..just keeps printing out:

FOO: Example header 1 (repeatedly, til you kill the script)

Can anyone point me to where I'm going wrong?

TIA!

Andy

Replies are listed 'Best First'.
Re: m modifier not doing what I'm expecting?
by Eliya (Vicar) on Dec 21, 2011 at 12:15 UTC

    You also want the /g modifier.  (/m alone matches from the beginning every time, thus the endless loop...)

      Aaah thanks - so was just missing the /g ... works like a charm now. Thanks!

      Andy
Re: m modifier not doing what I'm expecting?
by moritz (Cardinal) on Dec 21, 2011 at 12:14 UTC

      This is not a problem here, as the dot isn't supposed to match a newline.