use strict; use warnings; use Data::Dumper; chomp (my %key_hash = map { split /\s*[|]\s*/,$_,2 } grep (!/^$/,)); print Dumper \%key_hash; __DATA__ AAA|B|C|D|E BBB|G|H|I|J CCC|1|2|3|4 DDD|6|7|8|9