#!/usr/bin/env perl use strict; use warnings; my %results; { local $/ = ''; while (my $record = ) { $record =~ s/\A>(.+?)$//m; my $entry = $1; $record =~ s/\s//gm; $results{$entry}{len} = length $record; for (0 .. $results{$entry}{len} - 1) { ++$results{$entry}{count}{substr $record, $_, 1}; } } } use Data::Dump; dd \%results; __DATA__ >sp_0005 VQLQESGGGLVQAGGSLRLSCAASGRAVSMYNMGWFRQAPGQERELVAAISRGGSIYYA DSVKGRFTISRDNAKNTLYLQMNNLKPEDTGVYQCRQGSTLGQGTQVTVSS >sp_0017 HVQLVESGGGSVQAGGSLRLTCAASGFTFSNYYMSWVRQAPGKGLEWVSSIYSVGSNGYY ADSVKGRSTISRDNAKNTLYLQMNSLKPEDTAVYYCAAEPGGSWWDAYSYWGQGTQVTVS S #### { sp_0005 => { count => { A => 9, C => 2, ..., W => 1, Y => 5, }, len => 110, }, sp_0017 => { count => { A => 10, C => 2, ..., W => 5, Y => 10, }, len => 121, }, }