I don't have enough time to go through all of the code right now, but I do see quite a few reinvented wheels, as has been discussed before, for example, I've pointed you to File::Spec before. Reinventing wheels gives you more code to maintain, more code to test, and more chances to introduce bugs. For example, toNicePath is incorrect: a backslash \ is a valid character in *NIX filenames. Getting portability right is tricky, which is why modules like File::Spec exist in the first place.
I strongly recommend you take the time to study what modules are available to you, especially what core modules, as those are (almost) always installed.