Tom Christiansen wrote:

> Perl has *one* out-of-band value.  It doesn't need more.  That
> doesn't mean that perhaps some rare sorts of programming might not
> benefit from fancy weirdnesses.  That's what modules are for.
> You don't need to complicate the general language to get what
> you want.  Don't make others pay for your problems.

If it can be built with reasonable performance out of other mechanisms, I'm not
against that.  Just tell me how.  I don't claim to know everything about Perl, just
because I use it a lot.

> >1) all otherwise uninitialized variables are set to undef
>
> Wrong.  You cannot say that an aggregate is undef.  Scalar
> variables--not all variables, just scalar variables alone--hold the
> uninitialized value, henceforth known as the antiļinitialized value,
> if they were last initialized to the antiļinitialized value, or if
> they haven't been initialized at all--in which case, I suppose, you
> *might* choose to call it _a_n_t_eļinitialized instead of antiļinitialized,
> but then you'll get people wanting to split those up again.

OK, scalar variables.  But I see code in the XML modules that check defined (@array)
...

> >2) under "use strict", use of undef in expressions is diagnosed with a warning
>
> Wrong.  You are thinking, perhaps, of `use warnings', not `use strict'.
> In particular,
>
>     use warnings qw'uninitialized';

Yep, thanks for the correction.

> >3) undef is coerced to 0 in numeric expressions, false in boolean expressions,
> >and the empty string in string expressions.
>
> I'm not happy with your use of "coerce".  There's no mutation.  It simply
> *is* those things.

Fine.  So, in particular, it _isn't_ null.

> 4) The antiļinitialized value is autovivified to a true value when
>     used that value is (legally) used lvaluably.

If, by "true value" in the above, you mean a value other than undef which would be
interpreted as boolean false, then I think I understand what you said.  But not well
enough to have said it, which is why I used coerce.

> Notice also this:
>
>     % perl -le 'use warnings; $a = 1 == 2; print $a->[1] ? "good" : "bad"'
>     bad
>
>     % perl -le 'use strict;   $a = 1 == 2; print $a->[1] ? "good" : "bad"'
>     Can't use string ("") as an ARRAY ref while "strict refs" in use at -e line 1.
>     Exit 255

Interesting.  I learn something every day.  Today, you helped.  Maybe you can help
some more... implement me an SQL null, that can coexist with Perl undef, not replacing
it.

--
Glenn
=====
Even if you're on the right track,
you'll get run over if you just sit there.
                       -- Will Rogers


_______________________________________________
Why pay for something you could get for free?
NetZero provides FREE Internet Access and Email
http://www.netzero.net/download/index.html

Reply via email to