in reply to optimization - exists should return a reference

I'm not to familiar with the internals, but would it be possible to attack the problem from another angle? How about adding an 'deleted' flag to SVs? Then you could do:
my $val = $hash{foo}; return $val if exists $val;
I fear the consequences of this though; newbies mixing up exists and defined, people requesting delete to work on scalars too, making newbies even more confused. And I bet there are other things I haven't thought about.

As of perl5.6 you can use delete on arrays. But if you copy the array and check elements for existence all values will exist:
my @foo = ('a'..'d'); delete $foo[1]; # delete 'b'. my @bar = @foo; print int exists $foo[1]; # 0 print int exists $bar[1]; # 1
This is understandable, but not consistent with how the same thing would work for hashes. By not actually removing the element in the array, and instead replace it with the undefined value with the 'deleted' flag set, or upon FETCH:ing returning ditto, you could give the same behaviour to arrays, if that's desirable. I don't see any backwards-compability problems with this.

But as said, I don't know much about the perl guts, and I haven't actually thought this through.

Just an idea,
ihb