use strict; use warnings; use Data::Dumper; my %continents; while ( ) { chomp; my( $continent, $country ) = split m{:}; push @{ $continents{ $continent } }, $country; } print Data::Dumper->Dumpxs( [ \ %continents ], [ qw{ *continents } ] ); __DATA__ Europe:Germany Europe:France Asia:India Europe:Italy Asia:Japan Asia:Indonesia