The server is generally configured so that it executes CGI scripts that are located in the cgi-bin directory. However, the server administrator can set up aliases in the server configuration files, so that scripts with certain extensions (i.e., .cgi, .pl) can also be executed.
File permissions allow read, write, and execute access to users based on their user identification (also known as UID), and their membership in certain groups. You can use the command chmod to change a file's permissions. Here is an example:
% ls -ls form.cgi 1 -rwx------ 1 shishir 974 Oct 31 22:15 form.cgi*
This has a permission of 0700 (octal), which means that no one (besides the owner) can read to, write from, or execute this file. Let's use the chmod command to change the permissions:
% chmod 755 form.cgi % ls -ls form.cgi 1 -rwxr-xr-x 1 shishir 974 Oct 31 22:15 form.cgi*
This changes the permissions so that users in the same group as "shishir," as well as all other users, have the permission to read from and execute this file.
See the manpages for the chmod command for a full explanation of the various octal codes.
Perl can be installed anywhere on the system! The only thing you have to ensure is that the server is not running in a chroot-ed environment, and that it can access the interpreter. In other words, system administrators can change the root directory, so that "/" does not point to the actual root ("/"), but to another directory.
You can get a server error for the following reasons:
Generally, the HTTP server will be running as user "nobody," or "www," or some other user ID that has minimal privileges. As a result, the directory (where you intend to create the file) must be writeable by this process ID.
To be on the safe side, always check the return status from the open ( ) command to see if it was a success:
open (FILE, "/abc/data.txt") || &error ("Could not open file /abc/data.txt"); . . . sub error { local ($message) = @_; print "Content-type: text/html", "\n"; print "Status: 500 CGI Error", "\n\n"; print "<TITLE>CGI Error </TITLE>", "\n"; print "< H1>Oops! Error </H1>", "\n"; print "< HR>", $message, "< HR>", "\n"; }