#!/usr/bin/perl use strict; use warnings; open my $f,"<","x.txt"; my %tree; while (<$f>) { chomp; my ($c,$p)=split(/:/,$_); $tree{$c}=$p; } my %eert = reverse %tree; foreach my $l (keys %tree) { if (!defined($eert{$l})) { my @g=($l); while($l) { $l=$tree{$l}; push(@g,$l) if defined($l); } print join(':',@g),"\n"; } }