#!perl -w use strict; my $tokens = "32,15,4,72,13,28,14"; my %ranking = do { my $i; map { $_ => $i++ } split /,/, $tokens }; my ($default) = ($tokens =~ m/,(\d+)$/); # last token while (my $list = ) { chomp $list; my $best = $default; for my $b (split /,/, $list) { next unless defined $ranking{$b}; $best = $b if $ranking{$b} < $ranking{$best}; } print "$best\n"; } __DATA__ 4,13,15 4,50,15,13 50,60,70 #### #!perl -w use strict; my $tokens = "32,15,4,72,13,28,14"; my @ranking = split (/,/, $tokens); my $default = $ranking[$#ranking]; # last token while (my $list = ) { chomp $list; my %list = map {$_ => 1} split /,/, $list; my $best = ( grep {$list{$_}} @ranking )[0] || $default; print "$best\n"; } __DATA__ 4,13,15 4,50,15,13 50,60,70