On Mon, Sep 20, 2004 at 07:25:14AM -0600, Luke Palmer wrote:
: Perl 6 is making it easier to define custom block constructs like this
: one.  I worry about:
: 
:     method foo () {
:         preserve {
:             .bar;
:         }
:     }
: 
: This one's a tad more subtle.  Normally preserve's block would be 0-ary.
: But in this case it's unary, since it implicitly references $_.  
: 
: Is there a way to declare preserve so that its block will always be
: parsed 0-ary?  "if" is certainly able to do this (consider the above
: example with s/preserve/if $baz/).

Such a block is parsed as 1-ary, but with an implicit argument that
defaults to the caller's $_, something like:

    preserve sub ($_ = $CALLER::_) {
        .bar;
    }

Then it effectively becomes a run-time decision by "preserve" whether
to treat it as 0-ary or 1-ary.

Larry

Reply via email to