#!/usr/bin/perl while() { chop; $words{$_} = ''; $know_about{$_} = 1; } sub valid_entry ( $ ){local $_ = $_[0]; /^[A-Za-z\']+$/ && exists $words{$_}} foreach my $f (qw(working/variant_0.lst working/variant_1.lst working/variant_2.lst working/british_variant_0.lst working/british_variant_1.lst working/canadian_variant_0.lst working/canadian_variant_1.lst working/american.lst working/british.lst working/british_z.lst working/canadian.lst)) { open F, $f or die "Unable to open $f\n"; while () { chop; $know_about{$_} = 1; } } open F, "r/varcon/voc.tab" or die; while () { s/\(.+\)\n/\n/; my ($word) = grep {valid_entry $_} (split /[,\t\n]/); next unless defined $word; y/,\t -/\n/; s/(^|\n)\n/\n/g; $words{$word} .= $_; } open F, "r/varcon/variant.tab" or die; while () { @w = grep {$know_about{$_}} (split /[\t\n]/); next unless @w && grep {valid_entry $_} @w; $words{$w[0]} .= "$_\n" foreach @w; } open F, "r/varcon/variant-wroot.tab" or die; while () { s/^(.+)\:\t// or die; my $root = $1; next unless exists $words{$root}; @w = grep {$know_about{$_}} (split /[\t\n]/); next unless @w && grep {valid_entry $_} @w; $words{$w[0]} .= "$_\n" foreach @w; } while (($key, $value) = each %words) { print "$key\n$value"; }