This is a longer, more redundant solution, more of an exercise really. But you might find it interesting to examine the structure of the hash iteration this way. (I know I do!) This could be useful if you only have the main hash name (%gates_info
), and none of the keys under that. Which is what your question implies is the case. This pulls out all the key and value names as deep as the hash goes, in case any of those might be useful. (Note this does require knowing how many levels deep your hash is.)
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %gates_info=(
'order' => {
'nand' => {
'nand2_1' =>2,
'nand2_5' =>-1,
'nand2_4' =>2,
'nand2_6' =>-1,
'nand2_2' =>2,
'nand2_3' =>3
},
'and' => {
'and2'=>1,
'and3'=>2,
},
}
);
print Dumper %gates_info;
print "\n\n";
my @gate;
my $hival;
foreach my $gate (sort keys %gates_info) {
foreach my $gatekey (sort keys %{$gates_info{$gate}}) {
foreach my $deepkey (sort keys %{$gates_info{$gate}{$gatekey}}) {
my $deepvalue = $gates_info{$gate}->{$gatekey}->{$deepkey};
push @gate, $deepvalue;
@gate = sort @gate;
$hival = $gate[@gate - 1];
print "Gate is $gate, gatekey is $gatekey, deepkey is $deepkey, deepvalue is $deepvalue\n";
}
print "\nGatekey is $gatekey, highest value is $hival\n\n";
@gate = (); #empty gate array
}
}
exit 0;
The output of the code is:
$VAR1 = 'order';
$VAR2 = {
'and' => {
'and2' => 1,
'and3' => 2
},
'nand' => {
'nand2_3' => 3,
'nand2_6' => -1,
'nand2_4' => 2,
'nand2_5' => -1,
'nand2_2' => 2,
'nand2_1' => 2
}
};
Gate is order, gatekey is and, deepkey is and2, deepvalue is 1
Gate is order, gatekey is and, deepkey is and3, deepvalue is 2
Gatekey is and, highest value is 2
Gate is order, gatekey is nand, deepkey is nand2_1, deepvalue is 2
Gate is order, gatekey is nand, deepkey is nand2_2, deepvalue is 2
Gate is order, gatekey is nand, deepkey is nand2_3, deepvalue is 3
Gate is order, gatekey is nand, deepkey is nand2_4, deepvalue is 2
Gate is order, gatekey is nand, deepkey is nand2_5, deepvalue is -1
Gate is order, gatekey is nand, deepkey is nand2_6, deepvalue is -1
Gatekey is nand, highest value is 3