It might help if you stop moving the goalposts. First you're having trouble opening a file, now you're trying to rename one. One problem at a time. We still haven't seen the code that opens the file, but make sure it checks for errors, something like this
my $puserfile = "$SAVE_DIRECTORY/$puser";
open my $puserfn, '>', $puserfile or die "Cannot open $puserfile for w
+riting: $!";
That will try to open the file, and on failure report the filename and the reason to the error log. If you don't have easy access to the error log, change 'die' to 'print' to at least see it in your browser, or look at CGI.pm's ability to report all errors to the browser.
Debugging isn't that complicated, but you have to think through what's happening. Like I said before, check what errors are being generated, and make sure your code checks for them. If your code is supposed to create a file and it's not happening, error-check that part of the code. Don't just try something different. Make sure the filename it's trying to open is okay -- the full filename; don't assume any part of it is what you think it is. If it's a relative pathname, check the cwd at that point to make sure that's correct too. Check everything, and use error checking. Let Perl tell you what the problem is.