glob already does the matching, according to the patterm
you've specified, and returns the filtered filename list. In many cases, there's no need for further testing.
But in case you should want to do so (e.g. to filter by a regular expression,
which would allow more sophisticated matching than the shell patterns
understood by glob), you could use an additional grep.
For example, to get all filenames that start with a substring "foo",
which isn't (immediately) followed by "bar":
#!/usr/bin/perl -l
use strict;
use warnings;
my @files = grep /^foo(?!bar)/, glob("foo*");
print for @files;
(of course, in this case, using ..., glob("*") would have the same
effect, in which case all the filtering would be done by grep alone...)