#!/usr/bin/perl use strict; use warnings; use Data::Dump; my @loci_codes = qw( Bet01 Bet05 Bet06 Bet12 ); my %data; for my $dataIn ( qw( 230;238;101;103;138;146;112;116;; 230;238;101;103;146;146;108;112;; 224;238;0;0;146;146;110;118;; 238;238;0;0;146;146;112;114;; ) ) { my @alelos = split ";", $dataIn; for my $code (@loci_codes) { ++$data{$code}{shift @alelos}; ++$data{$code}{shift @alelos}; } } Data::Dump::dump(\%data); for my $code (@loci_codes) { print "$code: "; print join ', ', map {"$_ ($data{$code}{$_})"} sort {$a <=> $b} keys %{$data{$code}}; print "\n"; } #### { Bet01 => { 224 => 1, 230 => 2, 238 => 5 }, Bet05 => { "0" => 4, "101" => 2, "103" => 2 }, Bet06 => { 138 => 1, 146 => 7 }, Bet12 => { 108 => 1, 110 => 1, 112 => 3, 114 => 1, 116 => 1, 118 => 1 }, } Bet01: 224 (1), 230 (2), 238 (5) Bet05: 0 (4), 101 (2), 103 (2) Bet06: 138 (1), 146 (7) Bet12: 108 (1), 110 (1), 112 (3), 114 (1), 116 (1), 118 (1)