my %hash; while( <> ) { my ( $front, $back ) = split /\s*:\s*/; my @keys = split /\*/, $front; eval( '$hash' . ( join '', map { "{'$_'}" } @keys ) . "=" . $back ); }