in reply to simple regex match question

People have already explained that regexp are different than shell matching.

If you're trying to get a list of files matching a file spec, use glob. Otherwise, you'll have to use a regexp.

If the pattern can be a regexp, the following will do fine:

if ($file =~ /\.txt\z/) { print("Match\n"); } else { print("No match\n"); }

If you need must be a file spec, the following will convert (rudimentary, as in just * and ?) file specs into a regexp:

my $file_pattern = '.*'; my $re_pattern = ''; for ($file_pattern) { /\G \* /gcx && do { $re_pattern .= '.*'; redo }; /\G \? /gcx && do { $re_pattern .= '.'; redo }; /\G ([^*?]+) /gcx && do { $re_pattern .= quotemeta("$1"); redo }; } my $re = qr/^$re_pattern\z/; if ($file =~ $re) { print("Match\n"); } else { print("No match\n"); }

Don't forget that regexps are case-sensitive by default. Use /\.txt\z/i (first snippet) or qr/^$re_pattern\z/i (second snippet) to make the match case-insensitive.