#!usr/bin/perl -w use strict; my %HOA; my %seen; while () { my($name1,$name2,$value) = split; push ( @{$HOA{$name1}}, $value) unless $seen{$value}++; push ( @{$HOA{$name2}}, $value) unless $seen{$value}++; } foreach my $name (sort keys %HOA) { print "$name - ", "@{$HOA{$name}}","\n"; } =Program Prints: aaa - 123 234 345 bbb - 456 567 ccc - 678 =cut __DATA__ aaa bbb 123 aaa ccc 234 aaa ddd 345 bbb ccc 456 bbb ddd 567 ccc ddd 678