#! perl -slw use strict; use Data::Dumper; my @fields = split'\|', ; chomp $fields[-1]; my %HoH = map{ chomp; my%h; @h{ @fields } = split'\|'; ( $h{ last } . '_' . substr( $h{ first }, 0, 1 ) => \%h ) } ; print Dumper \%HoH; __DATA__ title|first|last|room|phone|email Mrs|Linda|Caralo|201|148|she@borg.org Miss|Jean|Androno|317|167|j@alo.com