use strict; use Data::Dumper; my @simple_pairs = qw(ag at ta cg gc); #'mirrored pairs' are pairs that will (eventually) #increment a 'base pair' w/ the same index; my @base_pairs = qw(ac tg tt cc ga); my @mirrored_pairs = qw(gt ca aa gg tc); my %counts; #the three arrays will be 'flattened' in the for loop $counts{$_} = 0 for (@simple_pairs, @base_pairs, @mirrored_pairs); while () { chomp; my $seq = $_; #use if-else to warn of unwanted/bad sequences if (exists $counts{$seq}) { $counts{$seq}++; } else { warn "Unknown pair: $_\n"; } } print "Before consolidating mirrored pairs:\n"; print Dumper(%counts); for (0..$#base_pairs) { $counts{$base_pairs[$_]} += $counts{$mirrored_pairs[$_]}; delete $counts{$mirrored_pairs[$_]}; } print "\nAfter consolidating mirrored pairs:\n"; print Dumper(%counts); 1; __DATA__ ag gc qa gt ca cg gt ca