use strict; use warnings; use Data::Dumper; ... my %hash; while () { chomp; my @line = split /\s+/, $_; my ($key1,$key2) = (shift @line, shift @line); $hash{$key1} = $hash{$key2} = [@line]; } print Dumper \%hash;