in reply to How can I use printf FORMAT strings for (Win32) shell globs?

I had a few minutes to take a crack, and the following is what I came up with. I made it about half-way through. It is tested, but not well vetted... ie. it runs, it's much safer than what you have, and it shows a bit cleaner of a way to display things (you don't need printf() in Perl in most cases as variables interpolate within double-quotes).

use warnings; use strict; die "need arg!\n" if ! @ARGV; chomp (my $match = $ARGV[0]); print "match: $match\n"; my ($prefix, $format, $ext) = $match =~ /([\w]+)(%[0-9]+d)\.([\w]+)/i or die "nope, can't dig up stuff\n"; print "prefix: $prefix\n" . "format: $format\n" . "ext: $ext\n\n"; my ($count) = $format =~ /%([0-9]+)d/ or die "can't fetch format...\n"; print "count: $count\n";

Output:

match: Img%04d.png prefix: Img format: %04d ext: png count: 04

I am literally gearing up to head out of the city to photograph Aurora Borealis (as the Kp index is extremely high), so the other Monks can help out with the rest, and correct me where I've been hasty ;)

Replies are listed 'Best First'.
Re^2: How can I use printf FORMAT strings for (Win32) shell globs?
by huck (Prior) on Jul 17, 2017 at 02:30 UTC

    ill continue

    my @files=@{finder()}; sub finder{ use File::Find; my $lpre=length($prefix); my $lext=length($ext); my $mustbesize=$lpre+$count+$lext; my @txts; find(sub { my $name=substr($File::Find::name,2); # kill the ./ ; return unless (length($name)==$mustbesize); return unless (substr($name,0,$lpre) eq $prefix); return unless (substr($name,-1,$lext) eq $ext); return unless (substr($name,$lpre,$count)=~m/^\d+$/); push @txts,$name; } , '.'); return \@txts ; } # finder

    Edit, opps, added the digits test, hope i did it right with substr as an lvalue