Vyacheslav Karamov wrote:
> Rob Dixon пишет:
>>
>>   foreach my $citation (@vancouverCites) {
>>
>>     print qq(Text = "$citation"\n);
>>
>>     while ($citation =~ /$regex/g) {
>>       print qq(pos = $-[0] to $+[0]\n);
>>     }
>>     print "\n";
>>   }
>>
>> I hope this helps,
>>
>> Rob
>>
>>   
> Hi, Rob!
> 
> I'm confused why your sample works with /g option and doesn't works 
> without it.
> 
> P.S. I don't know why, but Thunderbird removes code indentation.

Without the /g qualifier the regular expression is just repeated endlessly (if
it succeeds) or evaluated once (if it fails). So a construct like this

  while ($citation =~ /$regex/) {
    :
  }

is of no use at all. Adding the /g qualifier changes things, however. This is 
from

  perldoc perlop

> In scalar context, each execution of "m//g" finds the next
> match, returning true if it matches, and false if there is no
> further match. The position after the last match can be read or
> set using the pos() function; see "pos" in perlfunc. 

so because the condition of a while statement is in scalar context, the body
will be executed for each successful match of the regular expression on the
object string.

HTH,

Rob

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to