But I would like to pass all the below files only; j*.1.txt j*.3.txt j*.a.txt etc..
These examples all have only 1 character between the dots. If you just want that then you can amend the glob to look for that:
my @files = <data/j*.?.txt>;
OTOH, if you want to pass arbitrary globbing patterns you could do that in @ARGV but you'll need to quote them on invocation.
#!/usr/bin/env perl
use strict;
use warnings;
my @files = <data/j*.*.txt>;
if (@ARGV) {
@files = map { <data/$_> } @ARGV;
}
print "Using @files";
$ ./gt.pl
Found data/j.a.txt data/j.foo.txt data/j.xyz.txt
$ ./gt.pl 'j*.?.txt'
Using j*.?.txt instead
Found data/j.a.txt
See map for more on its usage.