On 11/23/05, Larry Wall <[EMAIL PROTECTED]> wrote:
> Basically, we're attaching the whole lazy/nonlazy mess to the
> list/scalar distincion, which I think is a really good default.
> We use ** and lazy() to violate those defaults.

I think you might be mixing up the "scope" of laziness here.  Having a
lazy string to me is much like:

    my @a = 1...;
    my $b = [EMAIL PROTECTED];

Scalar context is strict, but that doesn't necessitate strict
evaluation the whole way down.  The scalar context in that example is
saying "evaluate the reference *now*", not the list.

The kind of lazy string that would be affected by scalar context is:

    my $str = do { say "hi there"; "foo" };
    say "intermediate";
    say $str;

If scalar context were lazy, it would say "hi there" *after*
"intermediate" (but before "foo", of course).

But we're talking about a string with a lazy internal representation,
like a reference to a lazy list.  That's perfectly okay to pass around
in scalar context.  And I think it's perfectly okay to have
stringification return this kind of lazy string.


Reply via email to