If this works from the command line, but not as a CGI,
and the issue is missing environment variables, I would
first check your web server. You have to take special
measures (i.e., configuration) to have a web server set
environment variables that a CGI sees. The simple place
to start is to write a CGI script -- not even necessarily
Perl -- that shows what your environment is when the CGI
is invoked. Apache comes with this printenv CGI
script (written in Perl of course!):
#!/usr/local/bin/perl
##
## printenv -- demo CGI program which just prints its environment
##
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}