l'evasività delle risposte dipende dal fatto che tutto viene stabilito dall'amministratore del server tramite la configurazione del server web.

ad esempio su un mio server ho questa configurazione per i CGI di sistema:

codice:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>
invece per i CGI dei vari siti:

codice:
UserDir www
UserDir disabled root

ScriptAlias /cgi-bin/ /home/*/www/cgi-bin/
<Directory /home/*/www/cgi-bin>
        Options +ExecCGI
        AddHandler cgi-script .cgi .pl
</Directory>
dove con la "*" si indicano le home dei vari utenti, è una wildcat.

Ma le configurazioni possibili sono infinite.

tieni presente che tramite la direttiva:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/

si dice al web server di andare a cercare i file con questo URL:

http://www.tuosito.com/cgi-bin/script.pl

in:

/var/www/cgi-bin/script.pl
directory che quindi se ha i giusti chmod sarà raggiungibile dal web server.

Cosa completamente diversa è la stringa di inizio degli script:

#!/usr/bin/perl

chiamata shebang, che dice al web server dove trovare l'interprete di perl, che in genere sta in quella posizione o più raramente in /usr/local/bin/perl