Every request from a browser brings a raft of information with it to Apache, which reappears as environment variables. It can be very useful to have a subroutine like this:
sub print_env { foreach my $e (keys %ENV) { print "$e=$ENV{$e}\n"; } }
If you call it at the top of a web page, you see something like this on your browser screen:
SERVER_SOFTWARE = Apache/1.3.9 (Unix) mod_perl/1.22 GATEWAY_INTERFACE = CGI/1.1 DOCUMENT_ROOT = /usr/www/APACHE3/MedicPlanet/site.medic/htdocs REMOTE_ADDR = 192.168.123.1 SERVER_PROTOCOL = HTTP/1.1 SERVER_SIGNATURE = REQUEST_METHOD = GET QUERY_STRING = HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) PATH = /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin: /usr/X11R6/bin:/root/bin HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* HTTP_CONNECTION = Keep-Alive REMOTE_PORT = 1104 SERVER_ADDR = 192.168.123.5 HTTP_ACCEPT_LANGUAGE = en-gb SCRIPT_NAME = HTTP_ACCEPT_ENCODING = gzip, deflate SCRIPT_FILENAME = /usr/www/APACHE3/MedicPlanet/cgi-bin/MP_home SERVER_NAME = www.Medic-Planet-here.com PATH_INFO = / REQUEST_URI = / HTTP_COOKIE = Apache=192.168.123.1.1811957344309436; Medic-Planet=8335562231 SERVER_PORT = 80 HTTP_HOST = www.medic-planet-here.com PATH_TRANSLATED = /usr/www/APACHE3/MedicPlanet/cgi-bin/MP_home/ SERVER_ADMIN = [no address given
All of these environment variables are available to your scripts via
$ENV
. For instance, the value of
$ENV{'GATEWAY_INTERFACE'}
is
'CGI/1.1'
— as you can see earlier.
Environment variables can also be used to control some aspects of the behavior of Apache. Note that because these are just variables, nothing checks that you have spelled them correctly, so be very careful when using them.