Careful! Leaving something as obvious as $ENV{'PATH'} unset where your program relies on it is a blatant security hole. Anyone could set this beforehand to execute arbitrary code from a setuid root script! The best solution is to hard code the path right in to prevent any further complication. '/usr/bin/cat' instead of 'cat', for example. I hope you are also enabling taint checking for this CGI script! If you use any form-inputted data to run your program, the program will fail, as it should since an executed program could have some lethal or illegal or hacker arguments which perl would not be able to catch. The best solution is to use a CPAN module, but if that doesn't exist, then running executables from a CGI is generally very dangerous- every CGI execution will now consist of 2 processes- twice as many (not considering any prebuffering or other CGI speederuppers). It's best to avoid it, but if you can't, then closely monitor the the path to the binary as well as any arguments it may take.