my ($from, $to, @to); foreach () { chomp($_); ($from, $to) = split(/ -> /, $_); @to = split(/ /, $to); foreach (@to) { $hash{$_}{$from} = (); } } foreach (sort keys %hash) { print "$_ <-"; $to = $hash{$_}; foreach (sort keys %$to) { print " $_"; } print "\n"; } __DATA__ page1.html -> page2.html page3.html page2.html -> page3.html page4.html page3.html -> page4.html page4.html -> page1.html