|There's more than one way to do things|
There is no strict criteria.
If you don't ever assign values to them, there's no reason they'd need to exist at all.if you use it - localize it, and don't call other modules inside scope.
File::Find uses user's $; and it won't be fixed https://rt.perl.org/rt3/Public/Bug/Display.html?id=116350#txn-1183176
Sad there is not Perl documentation saying in which case those variables should be localized (or there is?).
What do you think about modules that can't handle file names that contain quotes?bug.
Or a newline?small bug (user is just waiting for troubles with those filenames)
What about not handling non-ASCII file namesmeans module does not support Unicode or specific platform (some perl core modules doest not support unicode - this is the criteria)
for which there seems to be no cross-platform way of handling them corectlyIt depends on what's "handling". I think there is way to just open files, crossplatform (except non Unicode platforms). Anyway, looks like a bug (if undocumented) or missing feature (if listed as known bugs). btw File::Find has open bugs for it.
Based on what criteria do you draw that line?The big difference, that programmer control perl variables, but does not control user's filenames. Also it depends on what program do. If it just open a one user supplied file - it's one case. If it searches files on disk and opens each of them - even user cannot control filenames, so it should handle (or at least catch an error) any valid filename.