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

Delete returns the deleted value*s* (plural) of a slice and you didn't test a slice. ¹

Exists returns an (informal) Boolean (1 or dualvar ""/0) for a hash entry, and logically should also return a list of booleans in case of a slice.

Cheers Rolf

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

Edit

¹) From the docs of delete I already linked to

my %hash = (foo => 11, bar => 22, baz => 33); my $scalar = delete $hash{foo}; # $scalar is 11 $scalar = delete @hash{qw(foo bar)}; # $scalar is 22 my @array = delete @hash{qw(foo baz)}; # @array is (undef,33) <--- H +ERE

Replies are listed 'Best First'.
Re^5: Why doesn't exist work with hash slices?
by ysth (Canon) on Sep 21, 2025 at 20:15 UTC
    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.
      > 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