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

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.

Replies are listed 'Best First'.
Re^10: Global regex giving up too soon
by Coruscate (Sexton) on Jan 20, 2004 at 13:18 UTC
    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.

      #!/usr/bin/perl use strict; use warnings; my $str = "123456"; $_ = $str; 1 while s/(\d)(\d)(\d)/$3$2/; print "$_\n"; $_ = $str; 1 while s/(\d)(\d)(\d)/$3$2/g; print "$_\n"; __END__ 62 52
      Abigail

        Thank you, that knocked it into me. I shall remember the difference.