develooper Front page | perl.perl6.language | Postings from June 2005

Re: proposal: binding with a function

Thread Previous
From:
Ingo Blechschmidt
Date:
June 23, 2005 08:29
Subject:
Re: proposal: binding with a function
Message ID:
loom.20050623T171309-231@post.gmane.org
Hi, 
 
Juerd <juerd <at> convolution.nl> writes: 
> Piers Cawley skribis 2005-06-23 15:30 (+0100): 
> > Brent 'Dax' Royal-Gordon <brentdax <at> gmail.com> writes: 
> > > As I've said before, Perl supports `alias`--it's just spelled `:=`. 
> > Here's a rubyish idiom: 
> >   my &old_behaviour := &function; 
> >   &function := sub { try_some_stuff || &old_behaviour } 
> > Except, with binding it doesn't work like that, you end up with an 
infinite 
> > loop.  
>  
> I still think subs should have a value, than can be copied :) 
>  
>     my &old_behaviour = &function; 
>     &function = sub { try_something || &old_behaviour }; 
 
I absolutely agree! 
 
But: Your example won't work correctly, as function() would 
return a Code reference (&old_behaviour) instead of calling 
old_behaviour, wouldn't it? 
 
I think all of the following should work: 
 
    my &old_behaviour = &function; 
    &function = sub { try_something() || old_behaviour() }; 
 
    my &old_behaviour = &function; 
    &function := sub { try_something() || old_behaviour() }; 
 
Additionally, with nothingmuch's lazy {...} proposal, the 
following should work, too (I think): 
 
    my &old_behaviour = &function; 
    &function = lazy { &try_something || &old_behaviour }; 
 
    my &old_behaviour = &function; 
    &function := lazy { &try_something || &old_behaviour }; 
 
 
--Ingo 
 
--  
Linux, the choice of a GNU | When cryptography is outlawed, bayl bhgynjf 
generation on a dual AMD   | jvyy unir cevinpl!   
Athlon!                    |  


Thread Previous


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