Using perl on f11 (perl-5.10.0-73.fc11.i586).
Perl's file glob is supposed to handle shell-style filename globs, including negated character classes, but it seems to be not quite right:
$ (cd /lib; perl -e 'print("$_\n") for <[Mm]*>')
$ (cd /lib; perl -e 'print("$_\n") for <[^Mm]*>')
The character class and its negation give exactly the same result.
Testing the same patterns in the shell gives the same 2 matches for the first pattern, 180 for the negated class, and 182 for everything in /lib.
The correct negation could be "!"
$ (cd /lib; perl -e 'print("$_\n") for <[!Mm]*>')
This command is working as you thought. I suppose ^ is for beginning of the line.
Oops--you're absolutely right. I guess the '!' is the standard shell pattern; I'm so used to bash accepting "^" I forgot about the other.
Thanks for the clue.