in reply to moving files
Security! You don't check the value of $old for dangerous characters (shell metacharacters, etc) and you do no untainting, which tells me that you don't have untaint mode on. For your safety, I encourage you to enable taint mode and check your params for "safe" characters. I suggest the following regex to start, until you can accurately pin down the dangers.
$old =~ s/[^\w]//g; #or possibly throw a warning
As for the need to move files, File::Copy is probably your best bet. If you insist on not using modules (in this or other pursuits) the module is still the best place for and answer to the question "how do I do it". After all, it's just as valid as asking us for help, and the module is the most tested solution to the problem. Study prior art! :-)Cheers,
Light a man a fire, he's warm for a day. Catch a man on fire, and he's warm for the rest of his life. - Terry Pratchet