in reply to You won't believe what this regular expression does!
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>
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: You won't believe what this regular expression does!
by haukex (Archbishop) on Feb 25, 2021 at 14:42 UTC | |
by LanX (Saint) on Feb 25, 2021 at 15:15 UTC | |
by haukex (Archbishop) on Feb 26, 2021 at 08:26 UTC | |
by salva (Canon) on Feb 26, 2021 at 11:55 UTC | |
by haukex (Archbishop) on Feb 26, 2021 at 13:16 UTC | |
by LanX (Saint) on Feb 26, 2021 at 13:17 UTC | |
|