in reply to Re2: pattern matching a limited number of times
in thread pattern matching a limited number of times

Doh! I didn't see your very similar solution before I posted....
It is very similar, isn't it? And I hadn't seen yaphy's solution before I posted mine. Now, it left me wondering: is setting pos() necessary, or will Perl DWIM, and continue matching at the same point in the (original) string without help? That's what s///g does.

Well, it turns out that it appears to be using an offset in the string to keep track of where it was. So it is necessary.

$_ = 'abxy' x 12; for(my $i = 0; m/ab/g and $i++<5;) { substr($_, $-[0], $+[0]-$-[0]) = 'abXab'; } print;
Result: abXabXabXabXabXabxyabxyabxyabxyabxyabxyabxyabxyabxyabxyabxyabxy

Not good.

$_ = 'abxy' x 12; for(my $i = 0; m/ab/g and $i++<5;) { substr($_, $-[0], $+[0]-$-[0]) = 'abXab'; pos = $-[0]+5; } print;
Result: abXabxyabXabxyabXabxyabXabxyabXabxyabxyabxyabxyabxyabxyabxyabxy

Good.

p.s. I noticed this, which is also very awkward:

my $length = length(substr($_, 2, 2) = 'abXab'); print $length;
prints 2, not 5. What happened to the rule: the value of an assignment as an expression, is what you assign?

Replies are listed 'Best First'.
Re: Re: Re2: pattern matching a limited number of times
by BrowserUk (Patriarch) on Sep 14, 2002 at 10:48 UTC

    p.s. I noticed this, which is also very awkward:

    Aren't you simply being bitten by the same bug I reported here in thread which you commented on here?

    For reference, Perlbug assigned a ticket ID of [perl #16834].


    Well It's better than the Abottoire, but Yorkshire!