use strict; use warnings; use Data::Dumper; my %clients; while () { next if /^Surname/; next if /^-/; my ($surname, $firstname, $town) = unpack 'A13A16A20', $_; $clients{$surname} = {first => $firstname, town => $town}; } print Dumper(\%clients); __DATA__ Surname L20, First Name L20, Town L20 -------------------------------------------------- Chaplin Charlie Basel Estevez Emilio Santa Manica Sarte Jean Paul Montmarte Rikard Frank Amsterdam Rodin Paul Montmarte #### $VAR1 = { 'Rodin' => { 'first' => 'Paul', 'town' => 'Montmarte' }, 'Rikard' => { 'first' => 'Frank', 'town' => 'Amsterdam' }, 'Chaplin' => { 'first' => 'Charlie', 'town' => 'Basel' }, 'Sarte' => { 'first' => 'Jean Paul', 'town' => 'Montmarte' }, 'Estevez' => { 'first' => 'Emilio Santa', 'town' => 'Manica' } };