use strict; # DO NOT OMIT. use warnings; # DITTO. my $dir = shift || die "Gimme a dir full of text files!\n"; my $random_texter = build_texter(dir => $dir); print $random_texter->(); exit; sub build_texter { require List::Util; require Path::Tiny; require Carp; my %arg = ( dir => "YOU FORGOT TO SET THE DIR!", suffix => "", # e.g., .txt @_ ); my $dir = Path::Tiny::path($arg{dir}); -d $dir && -r _ || Carp::croak("$dir is not a readable directory"); my @files = grep /\Q$arg{suffix}\E\z/, grep -f, $dir->children; Carp::croak("There are no matching files in $dir") unless @files; sub { [ List::Util::shuffle( @files ) ]->[0]->slurp }; }