A good answer needs a little more context. For example, if the loop is in a sub then you can return rather than last when you get and have dealt with the match:
# always use strictures (the following two lines) use strict; use warnings; my @array = qw(key1 key2 key3 key4); my %hash = (key2 => undef, key4 => 'The goods', key5 => 'More goods'); doLoop (); sub doLoop { for my $key (@array) { next if ! exists $hash{$key}; # Skip if the key is not used in + the hash next if ! defined $hash{$key}; # Skip if the key exists, but i +s undefined next if $hash{$key} ne 'No goods'; print "The value for '$key' is '$hash{$key}'\n"; return; } print "Failed to find matching key\n" }
Prints:
Failed to find matching key
Without the sub, or if there is more work to do following the loop, you need to keep note of match success. Something like:
use strict; use warnings; my @array = qw(key1 key2 key3 key4); my %hash = (key2 => undef, key4 => 'The goods', key5 => 'More goods'); my $match = 0; for my $key (@array) { next if ! exists $hash{$key}; # Skip if the key is not used in the + hash next if ! defined $hash{$key}; # Skip if the key exists, but is un +defined next if $hash{$key} ne 'No goods'; print "The value for '$key' is '$hash{$key}'\n"; $match = 1; last; } print "Failed to find matching key\n" if ! $match;
In reply to Re: error message in the end of the array looping?
by GrandFather
in thread error message in the end of the array looping?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |