Hay varios problemas, y muy gordos.
El primero, es que estás usando el operador qx() para ejecutar un comando externo, y luego ejecutas system()
con el resultado de la anterior ejecución.
Quiero decir que qx()
YA ejecuta el comando que contiene. Y el resultado se lo pasas a system(), sin saber por qué necesitas ejecutar el resultado.
Otro problema es que las variables, dentro de qx() son interpoladas. Así que las apariciones de $1 son interpoladas. Y como en ese momento $1 no vale nada, lo que realmente ocurre es que desaparecen. Deberías escaparlas.
En resumen, que el código quedaría a algo así (no probado):
Using perl Syntax Highlighting
#!/usr/bin/env perl
while (my $kml=<*.kml>){
system('perl', q(-i -0777 -p -e 's|(<Placemark>.*?<\/Placemark>)| $1 =~ /<LineString>/?"":$1|gse'), $kml);
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Solo necesitamos ejecutar un comando cada vez, y no nos interesa la salida del resultado, así que sustituimos qx() por un system().
Dentro de él, no pasamos todo el comando en un único elemento o cadena de caracteres, porque eso provoca la ejecución de un shell, y por lo tanto, la expansión de las variables que el shell encuentre, algo que no queremos. Por eso, le pasamos a system() 3 argumentos. El primero es el nombre del ejecutable a arrancar, y el resto son los argumentos. De esta manera, no hay expansión de variables (más información en
perldoc -f system).
Nota: el operador q() sirve para entrecomillar "simple" cuando existen comillas simples en el texto. Ver
perldoc -f q.
Por otra parte... ¿Ejecutar perl dentro de perl? Casi mejor si ejecutas perl dentro de bash. O mejor aún si lo haces todo en un solo programa perl (hay un ejemplo en la explicación de '-i' en
perldoc perlrun).