Another means of doing this is server-push, last I checked it was only supported by Netscape though (it uses the multipart/x-mixed-replace MIME-type).
A different method, for IE, is to use client-pull with the active-x object
Microsoft.XMLHTTP. As bad as A-X is security wise, this one seems the most benign.
Of course, this requires some client-sever communication: Either you need to separate all of your subs, and call each cgi separately, or pass a q-string down to the server and route the cgi execution based on the parameter:
Accessed via javascript:
<script language=javascript>
var url="nameOfCgi.pl"
var httpObj = new ActiveXObject('Microsoft.XMLHTTP');
httpObj.open (GET,url,false);
httpObj.send();
return (httpObj);
//httpObj.responseText contains the returned html.
</script>