Hello Chas,
Wednesday, August 22, 2007, 10:21:01 AM, you wrote:
> On 8/22/07, Alexandru Maximciuc <[EMAIL PROTECTED]> wrote:
>> Hello,
>>
>> could someone please explain me these results:
> snip
>> print "1) ".scalar($_ =~ /$re/g)."\n";
>> my @a = $_ =~ /$re/g;
>> print "1) ".scalar(@a)."\n";
> snip
>> 1) 1
>> 1) 12
> snip
> The issue is scalar vs list context and its effect on the g option.
> In scalar context g causes the regex to match once per call moving the
> start position to after the match. This lets you do things like:
> my $str = "12 24 48";
> while ($str =~ /(\d+)/g) {
> print "found $1\n";
> }
> In list context the g option causes the regex to match as many times
> as it can and returns the matches:
> my @matches = $str =~ /(\d+)/g;
> print "found " . @matches . " matches\n";
> print "found $_\n" for @matches;
> see perldoc perlre and perldoc perlop for more information.
> from perldoc perlop
> The "/g" modifier specifies global pattern matching--that is,
> matching as many times as possible within the string. How it
> behaves depends on the context. In list context, it returns a
> list of the substrings matched by any capturing parentheses in
> the regular expression. If there are no parentheses, it
> returns a list of all the matched strings, as if there were
> parentheses around the whole pattern.
> 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. A
> failed match normally resets the search position to the beginā
> ning of the string, but you can avoid that by adding the "/c"
> modifier (e.g. "m//gc"). Modifying the target string also
> resets the search position.
thanks...
I assumed that scalar() forces a list context for its params. thaht
should be the problem :D
--
Best regards,
Alexandru mailto:[EMAIL PROTECTED]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/