--
On Sat, 9 Nov 2002 23:22:45
Brent Dax wrote:
>Michael Lazzaro:
># Brent Dax wrote:
># >
># > I was writing up some docs (in a perldoc-like style--we can always
># > change the form later, but the content is important), and started
># > working on documenting references. I ended up with this bit:
>#
># I imagine (if there are no objections) that the general
># perldoc writing style (booklike, informal) is probably
># exactly what we want, yes? We'll just break it up into
># *much* smaller individual sections, so that only one concept
># is being taught at a time. Probably.
>
>OK. I'm trying to do that in the stuff I'm writing.
>
># > =head3 Autovivification
># > @{%anagrams{$key}}.push $word;
># > $undefined_var[$idx]=$scalar;
>#
># Hmm, not a clue. I could argue that one both ways. Perhaps (thinking
># aloud) they only autovivify if you've explicitly called out
># the exact type they store, but otherwise generate an
># exception? (Because it seems like the behavior would be
># _very_ handy if you wanted it, and a real pain in the $#@
># when you invoked it unintentionally.)
>#
># So maybe if you previously declared them like this:
>#
># my \Array %anagrams;
># my \Array $undefined_var;
>
>I think that, if Perl can determine the type with virtually no
>ambiguity, it should autovivify.
Actually, this behavior has already (mostly) been decided over in P6
language. It was decided (and I agree) that the Perl 5 behavior of
autovivifying references to the basic data types is the incorrect
behavior, leading to a lot of bugs when dealing wityh complex data
structures. So no autovifiying an untyped $undefined_var[$foo]
However, a question unanswered is whether or not this behavior is
inappropriate when the data structure had been appropriately typed.
-Erik
In this case, since we know they
>wanted an array (they used the @ explicitly), we'll autovivify an array.
>(I say "virtually no" because one could make the argument that you don't
>know if we wanted a standard array or a typed one.)
>
>--Brent Dax <[EMAIL PROTECTED]>
>@roles=map {"Parrot $_"} qw(embedding regexen Configure)
>
>Wire telegraph is a kind of a very, very long cat. You pull his tail in
>New York and his head is meowing in Los Angeles. And radio operates
>exactly the same way. The only difference is that there is no cat.
> --Albert Einstein (explaining radio)
>
>
____________________________________________________________
Get 25MB of email storage with Lycos Mail Plus!
Sign up today -- http://www.mail.lycos.com/brandPage.shtml?pageId=plus