#!/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"; }