Sí, ese es el problema. Al ejecutar system(), estás pidiendo que ejecute un programa y que ESPERE a que termine.
Lo que necesitas es mandar a Windows que arranque un nuevo proceso, pero que te permita seguir con el tuyo.
El módulo que debes usar es
Win32::Process.
El único problema es encontrar el/los flags que debes usar para crear ese proceso. En esta
página hay algunas, pero no todas. Leyendo el libro Learning Perl on Win32 Systems, indica que es DETACHED_PROCESS.
Ejemplo.
Y sobre el fork(), se comentaba desde ActiveState que iban a hacerlo funcionar igual que en UNIX, pero me parece que no, que todavía funciona como hace unos años: el proceso que hace el fork se queda esperando hasta que el proceso hijo termina.