use File::Find::Rule; my $template = 'aaaa-nnnnnnnn'; (my $regex = $template) =~ s/([an])/$1 eq 'a' ? '[a-z]' : '[0-9]'/eig; my $matcher = rule( file => maxdepth => 1, name => qr/^$regex/i, start => $ARGV[0] ); while(my $file = $matcher->match) { ... }