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
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs