Voy a
elucubrar...
Estoy sospechando que lo que pasa es lo siguiente: el system() ejecuta la línea de comando. Como la orden empieza por 'start', lo que ocurre es que en la salida estándar se recibe la línea de comandos porque es lo que se recibe en la ventana de línea de comandos que 'start' genera. Y, por defecto, al ejecutar el fichero .bat, todas las líneas que lo forman salen también por la salida estándar (todas las órdenes de un BAT salen por la salida estándar si no les ponemos un ECHO OFF al principio).
Que se vea el interior del BAT lo podría entender de esa forma, pero no que no se esté ejecutando, salvo que esté pasando algo más extraño, como por ejemplo que la aplicación EXE esté esperando por la pulsación de una tecla.
Otra causa podría ser justo la contraria: la aplicación EXE no encuentra la salida estándar y termine inmediatamente.
Desde luego, system() dentro del programa Perl ejecuta la aplicación (si el usuario que está ejecutando el servidor web tiene permisos de ejecución del programa).
Haz pruebas, como por ejemplo un fichero BAT que contenga un
@ECHO "Hola" para saber si lo ejecuta o no. (La
@ creo recordar que tenía el mismo cometido que el ECHO OFF).
¿No hay nadie más que aporte alguna idea?