foreach (@data) { my %ipstn_s; my %ipstn_a; next if $_->{_status} eq 'STOP'; if ( $_->{_status} eq 'START' && $_->{_i_pstn_trunk} ) { my $i_pstn_si = extract( $_->{_i_pstn_circuit}, $_->{_i_pstn_trunk} ); push @{ $ipstn_s{$i_pstn_si} }, $_; pushnow( \%ipstn_s ); } elsif ( $_->{_status} eq 'START' ) { my $e_pstn_se = extract( $_->{_e_pstn_circuit}, $_->{_e_pstn_trunk} ); ... pushnow( \%ipstn_a ); } else { $ncounter++; } }