my %new_hash; foreach my $line (%refdes_bom) { foreach my $states (sort keys %{$refdes_bom{$line}->{STATES}}) { $new_hash{$refdes_bom{$line}->{CPN}} ->{$refdes_bom{$line}->{REFDES}} ->{SIDE} = $refdes_bom{$line}->{SIDE}; $new_hash{$refdes_bom{$line}->{CPN}} ->{$refdes_bom{$line}->{REFDES}} ->{DESC} = $refdes_bom{$line}->{DESC}; push (@{$new_hash{$refdes_bom{$line}->{CPN}} ->{$refdes_bom{$line}->{REFDES}} ->{STATES}}, $states); $new_hash{$refdes_bom{$line}->{CPN}} ->{$refdes_bom{$line}->{REFDES}} ->{STRING} .= $states; } } #### 'SB57002020P' => HASH(0x197d78c) 'Q20' => HASH(0x195a120) 'DESC' => 'S TR 2N7002DW 2N SOT-363' 'SIDE' => 'bottom' 'STATES' => ARRAY(0x195a150) 0 88002 'STRING' => 88002 'Q82' => HASH(0x1985f08) 'DESC' => 'S TR 2N7002DW 2N SOT-363' 'SIDE' => 'bottom' 'STATES' => ARRAY(0x1985f38) 0 88001 1 88003 'STRING' => 8800188003 'Q83' => HASH(0x19afd24) 'DESC' => 'S TR 2N7002DW 2N SOT-363' 'SIDE' => 'bottom' 'STATES' => ARRAY(0x19afd54) 0 88001 1 88003 'STRING' => 8800188003 #### my $count = 1; my $new_count; my $row; my %bundled_hash; foreach my $CPN (%new_hash) { foreach my $REFDES (sort keys %{$new_hash{$CPN}}) { $new_count = length $count; $row = $count; my $i; for ($i = $new_count; $i <= 4; ++$i) # Start with $i = 1 { $row = '0'.$row; } if (not defined $new_hash{$CPN}->{$REFDES}->{MATCH}) { push (@{$bundled_hash{$row}->{$CPN}->{REFDES}},$REFDES); $bundled_hash{$row}->{$CPN}->{SIDE} = $new_hash{$CPN}->{$REFDES}->{SIDE}; $bundled_hash{$row}->{$CPN}->{DESC} = $new_hash{$CPN}->{$REFDES}->{DESC}; $bundled_hash{$row}->{$CPN}->{STATES} = $new_hash{$CPN}->{$REFDES}->{STATES}; foreach my $REFDES1 (sort keys %{$new_hash{$CPN}}) { if ($new_hash{$CPN}->{$REFDES}->{STRING} eq $new_hash{$CPN}->{$REFDES1}->{STRING} && $new_hash{$CPN}->{$REFDES}->{SIDE} eq $new_hash{$CPN}->{$REFDES1}->{SIDE} && $REFDES ne $REFDES1) { #$bundled_hash{$row}->{$CPN}->{REFDES} = $REFDES; push (@{$bundled_hash{$row}->{$CPN}->{REFDES}},$REFDES1); $new_hash{$CPN}->{$REFDES1}->{MATCH}=1; } } } $count++; } } #### 00167 => HASH(0x19c39a8) 'SB57002020P' => HASH(0x19c39c0) 'DESC' => 'S TR 2N7002DW 2N SOT-363' 'REFDES' => ARRAY(0x19c39d8) 0 'Q20' 'SIDE' => 'bottom' 'STATES' => ARRAY(0x1980a44) 0 88002 00168 => HASH(0x19c5404) 'SB57002020P' => HASH(0x19c541c) 'DESC' => 'S TR 2N7002DW 2N SOT-363' 'REFDES' => ARRAY(0x19c5434) 0 'Q82' 1 'Q83' 'SIDE' => 'bottom' 'STATES' => ARRAY(0x1989a10) 0 88001 1 88003