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. Luke