The reason that File::Spec gives different results on different platforms is that File::Spec is intended to adapt to the platform that your program is running on — and different platforms expect different filenames!
If you are only processing filenames within your program, and do not need to map back from these "internal names" to file names (because you are storing the actual local filenames separately), you could use File::Spec to split the names and then specifically use File::Spec::Unix on all platforms to construct *nix-style "internal names" for processing. If I understand correctly, File::Spec::Unix will load on all platforms, so it is always available.
| [reply] [Watch: Dir/Any] [d/l] [select] |
| [reply] [Watch: Dir/Any] |