La pregunta no es cómo decirlo en un oneliner. Si está escribiendo el código en un trazador de líneas, , usted sabe que usted es. Pero, ¿cómo sabe un módulo, incluido en -MMy::Module::Name
, que todo comenzó desde un oneliner?¿Cuál es la mejor manera de saber si su perl se ejecuta en -e?
Esto es mío. Es no portátil y aunque se basa en comandos estándar de UNIX (aunque, puede hacerse transportable más o menos.)
my $process_info = `ps $$ | tail -1`;
my $is_oneliner
= $process_info =~ m/perl.*?\s+-[^\P{IsLower}e]*e[^\P{IsLower}e]*\s+/m
;
Y si usted tiene una expresión regular snazzier, no dude en mejorar la mía.
Un par de personas me han preguntado por qué querría hacer esto. Brian adivinó correctamente que quería cambiar el comportamiento de exportación en función de si se trata de un script, que podemos suponer que tiene una cierta cantidad de diseño, o si es un oneliner donde el usuario intenta hacer todo lo posible en una sola línea de comando.
Esto suena mal, porque hay este credo que los exportadores deben respetar otros paquetes - "! @EXPORT
es MAL" a veces conocido como Pero me parece que es una tonta consistencia cuando se aplica a los onelineros. Después de que todo Perl se desvive por violar la estructura de su lenguaje y le dé bucles fáciles si los solicita en la línea de comando, simplemente quiero extender esa idea para mi dominio operacional/comercial. Incluso quiero aplicar filtros de origen (gasp!) si esto ayuda.
Pero esta pregunta también sugiere que también me gustaría ser un buen ciudadano de Perl, ya que solo rompo las pautas de la comunidad en ciertos casos. Es increíble poder crear acciones importantes a nivel empresarial simplemente cambiando la línea de comando en un programador por lotes en lugar de escribir un módulo completamente nuevo. El ciclo de prueba está muy comprimido.
¿Por qué le importaría a un módulo si se invocaba de esta manera? – moonshadow