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

In reply to Re: optimization - exists should return a tweaked SV (was: ... a reference) by ihb
in thread optimization - exists should return a reference by John M. Dlugosz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.