the correct way is to use exists on each element.
But if you wanna check multiple keys in one run, why not using keys to get them?
you could try this to apply hash-slices:
DB<230> sub tst{ my $href=shift; my %needed; @needed{qw/name unit quantity/}=(); delete @needed{ keys %$href }; print "Elements missing; ", keys %needed if %needed; } DB<231> tst({name=>1,bla=>2,unit=>3,quantity=>4}) DB<232> tst({name=>1,bla=>2,unit=>3}) Elements missing; quantity DB<233> tst({bla=>2,unit=>3}) Elements missing; quantityname
but this is certainly easier understood and maintained:
DB<234> sub tst{ my $href=shift; my @missing = grep { ! exists $href->{$_} } qw/name unit +quantity/; print "Elements missing: @missing" if @missing; } DB<235> tst({name=>1,bla=>2,unit=>3,quantity=>4}) DB<236> tst({name=>1,bla=>2,unit=>3}) Elements missing: quantity
Cheers Rolf
( addicted to the Perl Programming Language)
In reply to Re: Check for existence of elements in a Hashref
by LanX
in thread Check for existence of elements in a Hashref
by quicoju
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |