#! /usr/bin/perl -l my %T = map {$_->[0] => $_} map {[split /,\s*/]} ; sub xz4 { ["$_[0]<-$_[2]", "$_[3].$_[1]"] } sub xln { my @r = @{@T{@_} // return (@_, '')}; @{ $r[3] //= xz4 @r[0,2], xln($r[1]) }; } print grep {s/\./= /} join " ", xln($_) for keys %T; __DATA__ M10, Q, P, M143, M10, P, M406, M143, PL, M407, M143, PL, M420, M143, E, M421, M143, E,