IIS doesn't have error logs in the same way that Apache does, so you're going to need to make the error visible. Try
use CGI::Carp qw(fatalsToBrowser);
This'll help you out during development, though you probably won't want it in for production code.
the problem was, i was expecting the file to be created in the same directory as the script (ie: the script is executed in the directory it resides in), but instead, it was in the root directory... :P
Just an FYI on security. If you are taking uploaded files and putting them on the system, make a directory to put these files in and only have that dir writable and make sure it is not executable. Also make sure to strip out all slashes from the filename so they can not attempt to drop files where ever on the system.