listmail wrote: > #!/usr/bin/perl -w > use strict; > use warnings; > > my %hash = ( "acc12", 1, > "acc2", 0, > "acc3", '', > "una1", 1 ); > > $hash{acc3} = (); > > my $valid="acc1|acc2|acc3"; > > > > while (my ($key, $value) = each (%hash)) { > if ($key !~ $valid) { > print "Invalid Key: $key, "; > } else { > print "Valid Key: $key, "; > } > > if (defined($value)) { > print "Value defined for $key: $value\n"; > } else { > print "Value undefined for $key\n"; > } > } > > # Trying to minimize code to validate keys and values. I'm not sure you > can do exact > # matching with regex. Can validation for specific key names be done > for each key > # without using multiple IF statements?
I would think if you just want valid and defined you could use: if ($key !~ /$valid/ and defined $value) { > # Valid keys: acc1, acc2, acc3 > # Values must be defined > # > # expected results: > # una1 should be invalid > # acc12 should be invalid > # acc3 should be valid, key value should not be undefined > # acc2 should be valid Modified version: use strict; use warnings; my %hash = ('acc12' => 1, 'acc2' => 0, 'acc3' => undef, 'una1' => 1); my $valid = '^(acc1|acc2|acc3)$'; while (my ($key, $value) = each %hash) { if ($key !~ /$valid/) { print "Invalid Key: $key, "; } else { print "Valid Key: $key, "; } if (defined $value) { print "Value defined for $key: $value\n"; } else { print "Value undefined for $key\n"; } } __END__ _______________________________________________ Perl-Unix-Users mailing list Perl-Unix-Users@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs