A ver... hay que tener algunos conceptos claros...
El JavaScript se ejecuta en el cliente, así que no se puede ejecutar en el CGI, que está en el lado del servidor. Entonces, no se puede ejecutar ningún evento JavaScript desde Perl. Hay que saber dónde se está ejecutando qué código en qué momento y en qué lugar.
El
return del JavaScript devuelve al control al punto del código JavaScript dentro del código HTML que lo llamó.
Ese código debe viajar con el resto del código HTML que el programa Perl envía al cliente. Como la generación del código HTML lo estás haciendo con el módulo CGI, hay que usar sus funciones para agregar el código JavaScript, que, normalmente, irá en la sección
<head>.
Según el manual de
CGI, para poder enviar un
<head> personalizado hay que hacer algo como esto (sacado del manual y ajustado a tu código):
Using perl Syntax Highlighting
my $codigo_javascript = <<EOC
function jsopt(institucion){
document.getElementById("institucion").innerHTML;
return;
}
EOC
Using perl Syntax Highlighting
print $q->start_html(
-title => 'Prueba con Select',
-script => $codigo_javascript,
);
Como ves, hay que iniciar el HTML, pero indicando que vamos a usar un trozo de código en JavaScript. El módulo CGI se ocupará de colocarlo en su sitio, en la cabecera (más información en la sección
CREATING THE HTML DOCUMENT HEADER).
Luego está el tema de que, cada vez que el usuario hace una elección, la página se redibuja (es una petición HTTP completa), por lo que el CGI debe redibujar toda la página, y recordar el estado de los controles de los formularios, en cada petición.
Otra opción es usar la técnica de Ajax. En estos mismos foros tienes un
hilo y ejemplo completo sobre el tema.