in reply to Re: How best to validate the keys of hashref arguments?
in thread How best to validate the keys of hashref arguments?

Firstly, it looks like you have a typo in the "unless" line, $k should perhaps be $key.

Secondly, using a scalar and concatenating spaces and bad keys onto a string seems a little awkward. Using an array instead and taking advantage of how it is interpolated inside double quotes seems more natural. I'm not sure why you use a mixture of single and double quotes along with concatenation in your print statement, just interpolate inside double quotes.

use strict; use warnings; use feature qw{ say }; my %allowed = map { $_ => 1 } qw{ name user host command }; my @commands = ( { name => q{Fred Bloggs}, user => q{fbloggs}, host => q{red}, command => q{ls},, }, { name => q{Charlie Farley}, user => q{cfarley}, host => q{green}, zone => q{A}, building => q{Chaucer}, command => q{ps}, }, ); for my $command ( @commands ) { my @badKeys = grep { not exists $allowed{ $_ } } keys %$command; say @badKeys ? qq{Command invalid: bad keys: @badKeys} : q{Command OK}; }

The output.

Command OK Command invalid: bad keys: zone building

I hope this is of interest.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^3: How best to validate the keys of hashref arguments?
by cbeckley (Curate) on Mar 16, 2017 at 14:46 UTC

    Thank you huck and johngg! I had tried looping through the keys to verify they were what I was expecting, but map and grep are dramatic improvements.

    Thanks,
    cbeckley