sub print_lineage { my ($x) = @_; my @p; while (exists $kids{$x}) { $x = $kids{$x}; push @p,$x; } if (@p) { local ($") = ", "; print "Lineage of $_[0] is @p\n"; } else { print "Lineage of $_[0] is unknown\n"; } } print_lineage $_ for @ARGV;