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/


Reply via email to