http://qs1969.pair.com?node_id=1063782


in reply to Loop Quandary

My guess is in the first loop the match happens on the same string each time, so you'll find each a in turn then exit the loop

In the second example, you call InfStr on every cycle of the loop, which makes it a regex against a new string, so it'll find the first a in the string each time and never progress

(Update: You can see this more clearly if you use (.) instead of (a) for the match; first loop will go through each letter, second on will always find the first a)

Replies are listed 'Best First'.
Re^2: Loop Quandary
by choroba (Cardinal) on Nov 21, 2013 at 23:45 UTC
    Nice explanation. Interestingly, adding the empty prototype to the sub definition and removing return changes the behaviour, as Perl optimizes the sub away:
    sub InfStr () { 'ababa' }

    which is equivalent to

    use constant INFSTR => 'ababa';
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ