Una solución portátil (
portable y
portabilidad no están en el diccionario) la obtendrías siempre que usases herramientas reconocidas a lo largo de los años y por el mercado de software en donde te mueves, incluyendo el sistema operativo.
Si vas a hacer una solución que no se va a mover de una cierta arquitectura -por ejemplo, estar siempre en Linux/UNIX- entonces solo tienes que preocuparte de mantener una compatibilidad dentro de esa arquitectura.
Si estás en Linux/UNIX y quieres usar C para llamar a Perl, solo tienes que incorporar la función system() de la librería stdlib.h (ejecuta un
man 3 system). Así puedes ejecutar el intérprete perl y pasarle información por la línea de argumentos.
Las otras opciones, la de las tuberías, pues consulta
pipe en el
man 2, para pasarle grandes cantidades de información al programa, que tendrá que estar ejecutándose aparte, o hacer un fork() para lanzarle.
Lo más cómodo, sin duda, es la propuesta de creating021, la de intercambiar información por medio de ficheros temporales.
Y, finalmente, si quieres usar una solución verdaderamente compatible, usa solo Perl. Y teniendo en cuenta las pequeñas particularidades de cada sistema operativo.
Por ejemplo, lo que suele diferenciar a Linux/UNIX de Windows, de Mac y otros sistemas, es la nomenclatura de los subdirectorios. Bueno, para ello existen módulos como
File::Spec, incluido de base, que tiene en cuenta esas 'pequeñas diferencias'.