La opción '/g' te sobra.
En el system() para Windows no estás indicando qué aplicación debe ejecutarse para que abra el archivo. Por ejemplo:
system(qq(notepad.exe "$_[0]"));El operador qq() hace las mismas operaciones que las comillas dobles. Se usa para cuando el texto a entrecomillar ya tiene comillas.
Para Linux, también pasa lo mismo con el tema de los espacios, por ser una limitación del sistema de línea de comandos, no del sistema operativo o del lenguaje.
system(qq(gedit '$_[0]'));La diferencia es que en Linux se suele usar comillas simples para rodear texto que queremos que el shell interprete de forma literal.
Caso distinto es abrir el archivo por parte de Perl. Perl lo hace fácil (como siempre, claro):
Using bash Syntax Highlighting
$ echo "Texto de prueba" > 'archivo con espacios.txt'
$ ls -l archivo\ con\ espacios.txt
-rw-r--r-- 1 explorer users 16 oct 30 22:16 archivo con espacios.txt
$ perl -E 'open $fh, "<", "archivo con espacios.txt"; while (<$fh>) { print }'
Texto de prueba
$
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4