Hi,

Yiyi Hu wrote:
> my( $s, $t ); $s = "value t is $t"; $t = "xyz"; print $s;
> in perl 5, it will give a warning, and won't do "right" thing.
> we have to use other way or eval '$s' before print to get a "correct"
> answer.
> 
> So I wonder, If we can make $scalar lazy also. As array now is lazy by
> default.

there're at least three different ways which do want you want:

    # Using a closure
    my $s = { "value t is $t" };
    # And then
    say $s();    # Note the ()

    # Using Proxy
    my $s := new Proxy: FETCH => { "value t is $t" };
    # And then
    say $s;      # Note no ()

    # With nothingmuch's lazy proposal (implemented in Pugs)
    my $s := lazy { "value t is $t" };
    say $s;      # Again, no () needed


BTW, does Proxy fill in an appropriate default if one misses STORE? I.e.

    new Proxy: FETCH => { "foo" };  # same as
    new Proxy:
        FETCH => { "foo" },
        STORE => {
            die "No STORE block...";
        };


--Ingo

-- 
Linux, the choice of a GNU | The next statement is not true.
generation on a dual AMD   | The previous statement is true.  
Athlon!                    | 

Reply via email to