I tried to simplify the case to avoid misunderstandings
DB<32> p "hello" =~ s/o*$/O/gr; hellOO DB<33> $_="hello"; s/o*$/O/g; print # for older Perls hellOO DB<34>
Surprise: the o is replaced twice.
You and Hauke already explained that
(And I agree that the referenced perlre#Repeated-Patterns-Matching-a-Zero-length-Substring needs a rewrite)
DB<41> $_="hello"; say pos,"($1)" while m/(o*$)/g; # pos doesn't c +hange 5(o) 5() DB<42> p "hello" =~ s/x*$/O/gr; # empty match ( +no x) helloO
Now, why is it surprising?
I think your case is that $ in combination with the /m modifier should act differently. Correct?
Here a guess for the last question
DB<44> p "hello\nfoo" =~ s/o*\n/O/gmr; hellOfoo DB<45> p "hello\nfoo\n" =~ s/o*\n/O/gmr; # added \n at the end of + input hellOfO DB<46>
Question @all: Is the problem better understood now? :)
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
added more code
added headlines for structuring
°) because empty patterns are always matching
compare
DB<59> p "12345" =~ s/x*/ /gmr; 1 2 3 4 5 DB<60>
In reply to Re: You won't believe what this regular expression does!
by LanX
in thread You won't believe what this regular expression does!
by salva
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |