in reply to Re^4: Why doesn't exist work with hash slices?
in thread Why doesn't exist work with hash slices?

And if given a key value slice, delete returns a list of key value pairs of what was deleted from the hash. Not clear what a corresponding exists feature would do.
  • Comment on Re^5: Why doesn't exist work with hash slices?

Replies are listed 'Best First'.
Re^6: Why doesn't exist work with hash slices?
by LanX (Saint) on Sep 22, 2025 at 09:17 UTC
    > delete returns a list of key value pairs of what was deleted

    Yes and no.

    delete returns also key value pairs that are in the slice but didn't exist before, now with an undef value.

    DB<1> @h{a..c}=1..3 DB<2> x delete %h{c,d} 0 'c' 1 3 2 'd' 3 undef DB<4> x delete @h{a,d} 0 1 1 undef DB<5>

    This means you can't use delete to calculate the intersection of two sets of keys. (Well you can, but only with detours).

    This is a missed opportunity with delete %h{LIST} we could have implemented sets via hashes.

    > Not clear what a corresponding exists feature would do

    Probably exactly the same thing like with a classic slice.

    But exists SLICE in scalar context could return the number of existing elements. This could be equally used to calculate any or all .

    Well this kind of would break the symmetry to delete SLICE with only returns the last element in the list. But this is a pretty useless feature anyway IMHO

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery