my (%big,%small); while(){ my ($p1,$p2,$n) = split; push @{$big{$p2}},$p1; push @{$small{$p1}},$p2; } sub Larger{ my ($s1,$s2) = @_; my @strings; my @strings2; my $debug = 0; print " $s1 ? $s2 \n"; my (@big,@small); my %seen; my @elements = ($s1); my $count; my %added; while(my $x = shift @elements){ next if $seen{$x}; $seen{$x}++; foreach (@{$big{$x}}){ next if $seen{$_}; next if $added{$_}; push @big, $_; $added{$_}++; push @elements, $_; } } print "Larger:"; print join " ",@big,"\n"; }