in reply to Aliasing bites

Correct me if I'm wrong, but isn't this more about autovivification than it is about aliasing? Your leading paragraph sounds about right, that aliasing can lead to hard to debug problems. But the meat of your Meditation appears to be an autovivification problem, to my eyes.

Update: I see where the aliasing comes in, but I still think the problem is caused by autovivification. It's all a matter of perspective, really, and I just wanted to explain mine. I suppose this is ambrus' Meditation, and he can say the topic is aliasing if he wants, but that doesn't change my view of the particular example he chose to use.

Replies are listed 'Best First'.
Re^2: Aliasing bites
by ambrus (Abbot) on May 11, 2005 at 14:05 UTC

    I disagree, this is not an autovivification problem.

    Autovivification happens when you have an undefined scalar, you dereference it in an lvalue context, then a new scalar/array/hash gets allocated, and the formerly undefined scalar is set to a reference to this new scalar/array/hash.

    The simplest example to autovivification is this: my $x; $$x = 42; After this, the content of $x is no longer undef, but instead, it's a reference to 42. Similarly, any of these create a new array and sets the scalar to a reference to it:

    my $x; @$x = (5, 7); my $y; $$y[2] = 9; my $z; @$z[2 .. 4] = (5, 7); my $w; grep 0, @$w[2 .. 4];

    Now compare this to my example, which was, in its simplest form:

    my @x; grep 0, $x[2];
    This has not set any (formerly undefined) scalar to a reference. While it has allocated a scalar, that's for a different reason.
Re^2: Aliasing bites
by dragonchild (Archbishop) on May 11, 2005 at 13:29 UTC
    It is an autovivification problem, yes. However, the autovivification occurs due to the aliasing of grep (and map and sort and a few others). That's why aliasing is correctly the focus of this meditation.

    • In general, if you think something isn't in Perl, try it out, because it usually is. :-)
    • "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"