use strict; use warnings; my $str = 'ababa'; while($str =~ /(a)/g){ # works print $1,$/; } while(InfStr() =~ /(a)/g){ # infinite loop print $1,$/; } sub InfStr{ return 'ababa'; }