$VAR1 = { 'A' => [ 2, 1, 1 ], 'T' => [ 1, 3, 1 ], 'C' => [ 0, 0, 1 ], 'G' => [ 1, 0, 1 ] }; #### #!usr/bin/perl use strict; use warnings; use Data::Dumper; local our @deep; local $; = ','; # A vestige of a previous version my @data = qw(AAA ATG TTT GTC); my @d2 = map [ split // ], @data; my (%hash); for my $entry (@d2) { *deep = $entry; for my $nx (0..$#deep) { $hash{$deep[$nx]}[$nx]++; } } foreach my $entry (values %hash) { $entry = [ map defined $_ ? $_ : 0, @$entry ]; } print Dumper(\%hash);