I notice that when you invoke blastall, the path is relative. If the CWD of the CGI process is not what you expect, then that would fail. Printing the value of $output (ie send it through the socket to appear the web browser) would help indicate whether this is happening.