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

Reply via email to