Well, first of all you've done the first step which is checking the actual error that your code is throwing, so that puts you a bit ahead of the game.
A permission denied probably error means one of two things:
- you don't have write access to the directory you're trying to write to
- you're trying to access the wrong directory
The first one could be the case if your CGI program is running as a different user than you're expecting. You can check this by printing out the user ID (though don't do this in production code!). The second one could be the case if the current directory is not where you expect it to be. Specifically, just because your code is in /var/www/cgi-bin does not necessarily mean that /var/www/cgi-bin is the current directory when your code runs. You can work around this by hard-coding the absolute path of the directory or fetching it from some kind of configuration variable.