my @parts = $ARGV[0] =~ /^(\w+)%(\d+)d[.](\w+)$/; $parts[1] =~ s/^0*//; my $re = qr{(?x: ^ $parts[0] \d{$parts[1]} [.] $parts[2] $ )}; my $glob_str = "$parts[0]*.$parts[2]"; print for grep { /$re/ } glob $glob_str; #### $ ls -1 Img* Img.png Img.svg Img0000.png Img1.png Img12.png Img123.png Img1234.png Img12345.png Img1239.png #### #!/usr/bin/perl -l use strict; use warnings; print 'Command line arg:'; print $ARGV[0]; my @parts = $ARGV[0] =~ /^(\w+)%(\d+)d[.](\w+)$/; print "Parts: @parts"; $parts[1] =~ s/^0*//; print "Parts (after stripping zeros): @parts"; my $re = qr{(?x: ^ $parts[0] \d{$parts[1]} [.] $parts[2] $ )}; print "Filter RE: $re"; my $glob_str = "$parts[0]*.$parts[2]"; print "Glob string: $glob_str"; print 'Found files:'; print for grep { /$re/ } glob $glob_str; #### $ pm_1195222_fmt_glob_re.pl 'Img%04d.png' Command line arg: Img%04d.png Parts: Img 04 png Parts (after stripping zeros): Img 4 png Filter RE: (?^:(?x: ^ Img \d{4} [.] png $ )) Glob string: Img*.png Found files: Img0000.png Img1234.png Img1239.png #### $ pm_1195222_fmt_glob_re.pl 'Img%03d.png' Command line arg: Img%03d.png Parts: Img 03 png Parts (after stripping zeros): Img 3 png Filter RE: (?^:(?x: ^ Img \d{3} [.] png $ )) Glob string: Img*.png Found files: Img123.png