/ / ¿Cómo puedo convertir el script Perl en una sola línea - perl, línea de comandos?

¿Cómo puedo convertir el script Perl en one-liner - perl, línea de comandos?

Conozco el back-end del compilador de Perl que te permite convertir cualquier script de una sola línea de comandos en la siguiente materia:

perl -MO=Deparse -pe "s/(d+)/localtime($1)/e"

Lo que daría la siguiente salida.

LINE: while (defined($_ = <ARGV>)) {
s/(d+)/localtime($1);/e;
}
continue {
print $_;
}

¿Es posible que haya una herramienta inversa, utilizable desde la línea de comandos, que siempre que el script completo genere una versión de una sola línea?

Nota: el ejemplo anterior fue tomado de https://stackoverflow.com/a/2822721/4313369.

Respuestas

1 para la respuesta № 1

Perl es un lenguaje de sintaxis de forma libre con declaraciones claras y separadores de bloque, por lo que no hay nada que le impida simplemente plegar un script normal en una sola línea.

Para usar tu ejemplo a la inversa, puedes escribirlo como:

$ perl -e "LINE: while (defined($_ = <ARGV>)) { s/(d+)/localtime($1);/e; } continue { print $_; }"

Este es un ejemplo bastante artificial, ya que hay una forma más corta y clara de escribirlo. Presumiblemente, estás empezando con scripts que ya son tan cortos y claros como deberían ser.

Alguna use Las declaraciones en su programa se pueden convertir en -M banderas

Obviamente hay que tener cuidado al citary otros personajes que son especiales para el shell. Mencionas que ejecutas esto en un sistema remoto, por lo que supongo que te refieres a SSH, lo que significa que ahora tienes dos niveles de shell para escabullir cualquier escape. Puede ser difícil calcular la secuencia correcta de escapes, pero siempre es factible.

Este método puede funcionar para traducir automáticamente un script de Perl en un disco de una sola línea:

$ perl -e "$(tr "n" " " < myscript.pl)"

El script de Perl no puede tener comentarios, ya que eso comentaría todo el resto del script. Si eso es un problema, un poco de egrep -v "w+#" Tipo de piratería podría resolver el problema.