develooper Front page | perl.perl5.porters | Postings from October 2003

Re: /(\w|(?{++$n}))*/

Thread Previous | Thread Next
From:
Mark Jason Dominus
Date:
October 29, 2003 13:16
Subject:
Re: /(\w|(?{++$n}))*/
Message ID:
20031029211710.21550.qmail@plover.com

> On Oct 29, Jeff 'japhy' Pinyan said:
> 
> >Is that "|" supposed to be there?  The code
> >
> >  $n = 0;
> >  "abc" =~ /(\w|(?{++$n}))*/;
> >
> >stores 'abc' in $& and 1 in $n.  The code
> >
> >  $n = 0;
> >  "abc" =~ /\w*|(?{++$n})?/;
> >
> >doesn't change $n.
> 
> And somewhat related, why doesn't
> 
>   "abc" =~ /(b?|[ac])*/;
> 
> match 'abc'?  It matches '' (the zero b's at the beginning of the string).

Why should it match 'abc'?  The first alternative alternative b? is
taken before the seoncd alternative [ac]* .

The * operator has special code in it to prevent it from going into an
infinite loop when its argument has matched an empty string, so the *
loop is exited after the first pass.


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About