in reply to Re: Re: Global regex giving up too soon
in thread Global regex giving up too soon

There is standard idiom for it:
1 while $str =~ s/PAT/REPL/;
Abigail

Replies are listed 'Best First'.
Re^8: Global regex giving up too soon
by Coruscate (Sexton) on Jan 20, 2004 at 12:42 UTC
    1 while $str =~ s/PAT/REPL/;

    Is the idiom supposed to contain the /g modifier? You didn't include it and I can't say I've ever seen 1 while s/foo/bar/, only 1 while s/foo/bar/g;. So tell me, should there be a /g there or am I in for a new lesson in the regex classroom?

      There doesn't have to be a /g modifier. For some regex/string pairs, it doesn't matter whether there's a /g modifier. For others, it does.

      Abigail

      my $str = join ' ', map {"$_-PAT"} 1 .. 10; warn $str; 1 while $str =~ s/PAT/REPL/; die $str; __END__ 1-PAT 2-PAT 3-PAT 4-PAT 5-PAT 6-PAT 7-PAT 8-PAT 9-PAT 10-PAT at - line + 2. 1-REPL 2-REPL 3-REPL 4-REPL 5-REPL 6-REPL 7-REPL 8-REPL 9-REPL 10-REPL + at - line 4.
      An infinite loop with 1 while
      my $str = 'A b and A and c and A'; warn $str; $str =~ s/A/a/i for 1,2,3; die $str; __END__ A b and A and c and A at - line 3. a b and A and c and A at - line 5.
        1 while $str =~ s/PAT/REPL/;

        Why not just $str =~ s/PAT/REPL/g;? Gives same result...

        $str =~ s/A/a/i for 1,2,3;

        All this really shows is that without 1 while or the /g modifier that it always matches at the beginning again during reiteration...

        I don't mean to be rude, but you didn't really demonstrate anything too revealing :) I'm looking for a case where there is a difference between 1 while s/foo/bar/ and 1 while s/foo/bar/g.

Re: Re: Global regex giving up too soon
by Wassercrats (Initiate) on Jan 20, 2004 at 12:33 UTC
    I'll have to figure out if I'd remember what that means or if I should check $&. I think I got it. Ugly though.