App-wordlist
view release on metacpan or search on metacpan
lib/App/wordlist.pm view on Meta::CPAN
summary => 'Check some passwords against all Password wordlists except Password::RockYou (because it is slow to check)',
test => 0,
'x.doc.show_result' => 0,
tags => ['category:action-test'],
},
{
argv => [qw/-w Password::** -P RockYou -t foobar 123456 someGoodPass923/],
summary => 'Check some passwords against all Password wordlists except those matching /RockYou/ regex',
test => 0,
'x.doc.show_result' => 0,
tags => ['category:action-test'],
},
],
'cmdline.default_format' => 'text-simple',
'x.doc.faq' => <<'_',
## How to select multiple wordlists? It's cumbersome having to -w WORDLIST1 -w WORDLIST2 and so on!
You can specify wildcard in `-w` option, e.g. if you want to include all English
wordlists you can use `-w EN::*` or `-w EN::**` (`**` recurses while `*` only
matches one level deep).
Or you can also use `-b` option. Some people bundle wordlists together and put
them up on CPAN in the `Acme::CPANModules::WordListBundle::*` namespace. You can
install those modules first then use the wordlist bundle.
## Can `wordlist` help me solve Wordle?
Yes, using regex or the `--chars-ordered` and `--chars-unordered` options. For
example, if you have:
T W _ S _
(3 letters with the correct position), you can use:
% wordlist -w EN::Wordle '/^tw.s./' --len 5
twist
or:
% wordlist -w EN::Wordle --chars-ordered tws --len 5
tawse
thaws
...
twist
twits
Another example, if you have:
W* T* _ S _
(2 letters with the incorrect position and 1 letter in the correct position),
you can use:
% wordlist -w EN::Wordle --chars-unordered wts --len 5 '/^...s.$/'
Included in the distribution is the <prog:wordlist-wordle> script for
convenience. This CLI defaults to grepping the "EN::Wordle" wordlist and you
specify something like `wt_S_` for the pattern (lowercase for letter in
incorrect position, uppercase for letter in correct position, underscore for
unguessed):
% wordlist-wordle 'wt_S_'
_
};
sub wordlist {
require Encode;
require Module::Load::Util;
my %args = @_;
my $action = $args{action} // 'grep';
my $list_installed = _list_installed();
my $ci = $args{ignore_case} // 1;
my $or = $args{or};
my $arg = $args{arg} // [];
my $detail = $args{detail};
my $num = $args{num} // 0;
my $random = $args{random};
my $color = $args{color} // 'auto';
my $use_color = ($color eq 'always' ? 1 : $color eq 'never' ? 0 : undef)
// $ENV{COLOR} // (-t STDOUT);
if ($action eq 'grep' || $action eq 'stat' || $action eq 'list_selected' || $action eq 'test') {
# convert /.../ in arg to regex
for (@$arg) {
$_ = Encode::decode('UTF-8', $_);
if (m!\A/(.*)/\z!) {
$_ = $ci ? qr/$1/i : qr/$1/;
} else {
$_ = lc($_) if $ci;
}
}
my @res;
my $wordlists = [];
my $has_specified_list;
if ($args{wordlist_bundles}) {
$has_specified_list++;
for my $wb (@{ $args{wordlist_bundles} }) {
my $wbmod = "Acme::CPANModules::WordListBundle::$wb";
(my $wbmodpm = "$wbmod.pm") =~ s!::!/!g;
require $wbmodpm;
my $list;
{
no strict 'refs'; ## no critic: TestingAndDebugging::ProhibitNoStrict
$list = ${"$wbmod\::LIST"};
}
my $i = -1;
for my $entry (@{ $list->{entries} }) {
$i++;
my $mod = $entry->{module};
$mod =~ s/\AWordList::// or do {
warn "Wordlist bundle module $wbmod: entry[$i]: module is not WordList::, skipped";
next;
};
( run in 3.171 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )