Dave Storrs yiked:

>         Yikes.  Ok, I obviously badly misunderstood that.  I'll go back
> and reread it.  So, can you provide an example of a "pattern nested
> within a closure", since I obviously didn't understand?

Sure:

        m/ if  { /<comment>? ::: <keyword>/ and print $0.{comment} } /

The C</<comment>? ::: <keyword>/> pattern is nested within a closure, so if it
backtracks over the :::, it fails, but that failure doesn't propagate out
to the enclosing C<m/ if {...} /> regex, as it would if it had been:

        m/ if  [ /<comment>? ::: <keyword>/ { print $comment } /


BTW, the reason the previous example *did* was because the closure executed an:

        ...or fail

after trying the nested regex.


> > >         my &rx := /(xxx)/;
> > >
> > > Should that be a $ instead of a & on the rx variable?
> >
> > That ain't a variable, friend, that there's a gen-u-ine subroutine!
> > And it's being bound to a regex!!
> > (It's really just another way to give a regex a name ;-)
> 
>         Hmmm...what are the implications, here?  The results of the match
> are passed as arguments to the func?

No.

> When you run the func, the regex is called?

Yes.

> Something else?

No.


> > > Can subroutines that aren't used in regexen use 'fail' to throw an
> > > exception?  If so, how is it different from 'die' when used outside a
> > > regex?
> >
> > As I understand it, it isn't (currently).
> 
>         Just to be sure I understood:  you meant that (A) yes, you can use
> fail in a subroutine outside a regex, and (B) if you do, it is no
> different from die.  Is that correct?

As Larry pointed out, I had forgotten that C<fail> usually just returns
C<undef>, unless C<use fatal> is in effect, in which case it's like C<die>.

Damian

Reply via email to