my $input = $ARGV[0]; my %is_subset = map {$_ => 1} powerset(split //, $input); while (<$dict_fh>) { chomp; my ($word, $normalized) = split /\t/; print $word if $is_subset{$normalized}; } sub powerset { # ... return map {join '', sort @$_} @subsets; }