[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
Re: exists $foo[7] and delete $foo[7]
>On Thu, Jan 13, 2000 at 11:54:35AM -0800, "Gurusamy Sarathy" wrote:
>> On Thu, 13 Jan 2000 12:36:51 MST, Tom Christiansen wrote:
>> >>>Will delete allow for
>> >>> delete $a[100];
>> >>> print scalar @a; # prints 0 ???
>> >>Yes, that's what it does.
>> >So, delete on an array doesn't actually do the same thing as
>> >pop/splice/shift would. I don't think that this won't confuse
>> >people. Do you not not think not either? :-)
>> I think it would confuse people who are willingly/easily confused,
>> yes.
>Which is really true for almost anything perl. No point in looking back now.
Sigh. No, it's not like that. I'm always showing pictures like this
Before:
0 1 2 3 4
+------+------+------+------+------+
+Every | Good | Boy | Does | Fine |
+------+------+------+------+------+
Muckage:
splice(@array, 1, 1);
After:
0 1 2 3
+------+------+------+------+
+Every | Boy | Does | Fine |
+------+------+------+------+
And likewise,
Before:
+-----+-----+
| K | 19 |
+-----+-----+
| Li | 11 |
+-----+-----+
| H | 1 |
+-----+-----+
| Ca | 38 |
+-----+-----+
| C | 14 |
+-----+-----+
Muckage:
undef $hash{Ca};
After:
+-----+-----+
| K | 19 |
+-----+-----+
| Li | 11 |
+-----+-----+
| H | 1 |
+-----+-----+
| Ca |undef|
+-----+-----+
| C | 14 |
+-----+-----+
And constrast that with
Before:
+-----+-----+
| K | 19 |
+-----+-----+
| Li | 11 |
+-----+-----+
| H | 1 |
+-----+-----+
| Ca |undef|
+-----+-----+
| C | 14 |
+-----+-----+
Muckage:
delete $hash{Li};
After:
+-----+-----+
| K | 19 |
+-----+-----+
| H | 1 |
+-----+-----+
| Ca |undef|
+-----+-----+
| C | 14 |
+-----+-----+
Now, if you stand your array on end, and make like its numeric indices
are in the keys' slots:
Before:
+-----+
0 |Every|
+-----+
1 |Good |
+-----+
2 |Boy |
+-----+
3 |Does |
+-----+
4 |Fine |
+-----+
Muckage:
undef $a[1];
After:
+-----+
0 |Every|
+-----+
1 |undef|
+-----+
2 |Boy |
+-----+
3 |Does |
+-----+
4 |Fine |
+-----+
Then I show this in constrast with
Muckage:
splice(@array, 1, 1);
After:
+-----+
0 |Every|
+-----+
1 |Boy |
+-----+
2 |Does |
+-----+
3 |Fine |
+-----+
This is nice and parallel. splice() to an array is delete() to a
hash. Well, I sure thought it was. Isn't it? I don't really
understand how to modify this for the proposed behaviour of delete
$array[1]. Please help me out here.
Before:
+-----+
0 |Every|
+-----+
1 |Good |
+-----+
2 |Boy |
+-----+
3 |Does |
+-----+
4 |Fine |
+-----+
Muckage:
delete $a[1];
After:
+-----+
0 |Every|
+-----+
1 |XXXXX|
+-----+
2 |Boy |
+-----+
3 |Does |
+-----+
4 |Fine |
+-----+
What goes in for XXXXX? I can't put undef, now can I? But isn't
that what's there? Except, this particular undef is different than
the one we got via assignment. It is, as I dimly apprehend it, a
*special* flavor of undef, isn't it? But isn't undef already a
special flavor of false?
--tom
- Follow-Ups from:
-
Bart Schuller <schuller@lunatech.com>
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]