On Tue, Jun 14, 2005 at 12:33:34PM +0000, Ingo Blechschmidt wrote:
: Hi, 
:  
:   sub proxy () is rw { 
:     return new Proxy: 
:       FETCH => { 42 }, 
:       STORE => -> $new { 23 }; 
:   } 
:  
:   say proxy();        # 42 
:   say proxy() = 40;   # 40, 23, or 42? 
:  
: Currently I think the last line should output 40, consider: 
:  
:   sub innocent_sub ($var is copy) { 
:     my $foo = ($var = 40); 
:     # Do something with $foo, relying on $foo being 40. 
:   } 
:  
:   { my $x = "does not matter"; innocent_sub $x } 
:   # Works 
:  
:   { my $x := proxy(); innocent_sub $x } 
:   # Would break if (proxy() = 40) would not return 40. 
:  
: But I can argue that the return value of Proxy object should 
: be the return value of the code given by FETCH in the Proxy 
: object construction, too... 
:  
: Opinions? 

The intention is that lvalue subs behave in all respects as if they
were variables.  So consider what

    say $nonproxy = 40;

should do.  This also extends to other operations than assignment:

    temp $foo.bar() = 40;

or the very-nearly-Software-Transactional-Memory-oriented:

    let $object.attribute() = 40;       # hope this sticks...

Larry

Reply via email to