A few rounds of testing suggested that adding a “required” list of letters would be helpful. These are letters for which the position is unknown, but Wordle has identified as correct.

The usage pattern is:

wordle-solver.pl ...er wat ulc

Also, the world list gets additional prefiltering. No words with capitals or apostrophes are considered.

#!/usr/bin/env perl
use strict;
use warnings;

sub main {
    my ($pattern, $exclude, $required) = @ARGV;

    if (!$pattern) {
        die("$0 [PATTERN] [EXCLUDE] [REQUIRED]");

    if (length($pattern) != 5) {
        die("Pattern must be 5 characters\n");

    $exclude //= "";
    $required //= "";
    my @required;
    if ($required) {
        @required = split //, $required;

    open my $wordsFH, "<", "/usr/share/dict/words" or die("words: $!");

    while (my $word = readline($wordsFH)) {
        chomp ($word);
        next NEXT_WORD if length($word) != 5;
        next NEXT_WORD if $word =~ /['A-Z]/;

        if ($word =~ /^$pattern$/i) {
            for my $r (@required) {
                if ($word !~ /$r/) {
                    next NEXT_WORD;

            if ($exclude) {
                if ($word =~ /[$exclude]/) {
                    next NEXT_WORD;

            print "$word\n";
    close $wordsFH;


I am thinking about making this functionality available through a web app. Drop me a note if you think this is a good idea.