On 25/03/2012 14:11, Chris Stinemetz wrote:
Below is snippet from Data::Dumper dump from a hash I have.
What is the best approach for only printing the hashes that have the
value 'ND' or hashes that have different values such as '149' does
below.
'149' => {
'05' => '1',
'06' => '1',
'00' => '1',
'01' => '2',
'02' => '2',
'03' => '2',
'04' => '2'
},
'077' => {
'05' => 'ND',
'06' => 'ND',
'00' => 'ND',
'01' => 'ND',
'02' => 'ND',
'03' => 'ND',
'04' => 'ND'
},
'078' => {
'05' => '1',
'06' => '1',
'00' => '1',
'01' => '1',
'02' => '1',
'03' => '1',
'04' => '1'
},
Hi Chris
The program below puts the keys of the hash elements that pass your
criteria into @wanted.
Hope it helps,
Rob
use strict;
use warnings;
my $href = {
'149' => {
'05' => '1',
'06' => '1',
'00' => '1',
'01' => '2',
'02' => '2',
'03' => '2',
'04' => '2'
},
'077' => {
'05' => 'ND',
'06' => 'ND',
'00' => 'ND',
'01' => 'ND',
'02' => 'ND',
'03' => 'ND',
'04' => 'ND'
},
'078' => {
'05' => '1',
'06' => '1',
'00' => '1',
'01' => '1',
'02' => '1',
'03' => '1',
'04' => '1'
},
};
sub ND_or_multiple {
my %uniq;
for (values %{$href->{$_[0]}}) {
return 1 if $_ eq 'ND';
$uniq{$_}++;
return 1 if keys %uniq > 1;
}
return '';
}
my @wanted = grep ND_or_multiple($_), keys %$href;
print map "$_\n", @wanted;
**OUTPUT**
149
077
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/