Well, at least you know I'm using it... :-)
While doing a dry run using your sanitize option, I noticed a warning:
Use of uninitialized value in concatenation (.) or string at (eval 1)
+line 1.
I ran it again with -v to print to get this:
Using expression: sub { s/[!"$&()=?`*';<>|_[:cntrl:][:blank:]]+/_/g }
The problem is that the
$& is being interpolated. It is uninitialized, hence the warning. Worse, however, is that it doesn't remove dollars and ampersands from filenames. The fix is obvious; just escape the '$' in your character class.
FWIW, this behavior surprised me. Badly surprised me. I blanch at the thought that I may have made this same error countless times. I believe I've even given the advice "there's no need to escape a dollar sign in your character class" many, many times.
-sauoq
"My two cents aren't worth a dime.";