Testing a hash to see if it has values for all required keys. Extraneous keys are okay.
use strict; use warnings; use Test::More tests => 3; my (%required,%over,%under,%partial); $required{$_} = 1 for qw/header detail trailer/; $over{$_} = $_ for qw/title header subject detail trailer postscript/; $under{$_} = $_ for qw/header trailer/; $partial{$_} = $_ for qw/header trailer/; $partial{detail} = undef; ok(test_it(%over),'checking %over for required keys'); ok(test_it(%under),'checking %under for required keys'); ok(test_it(%partial),'checking %partial for required keys'); sub test_it { my %h = @_; # return (grep {$required{$_} && $h{$_}} keys %h) == (keys %required) +; return (grep {$required{$_} && defined $h{$_}} keys %h) == (keys %r +equired); }
Update: use of defined suggested by choroba. I would have run into this because 0 is a value I would encounter.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Does hash contain minimum keys?
by choroba (Cardinal) on Nov 11, 2016 at 17:24 UTC | |
Re: Does hash contain minimum keys?
by emshach (Initiate) on Dec 13, 2016 at 21:46 UTC |
Back to
Cool Uses for Perl