strawberry logo lane historia ejemplos perl

logo - ¿Cómo puedo impresionar a las personas con las capacidades de Perl?



perl vs python (17)

Me gustaría hacer una presentación para mis compañeros de trabajo que muestre algunas cosas increíbles que Perl puede hacer, cosas que harían que tanto los programadores como los no programadores se dijeran a sí mismos: "¡¿Quién puede hacer eso ?!" Realmente quiero llamar la atención, ya que muchos piensan que Perl es un lenguaje moribundo, pero también divertido y entretenido.

Algunas ideas que tengo son demostraciones de los siguientes módulos:

¿Alguna recomendación o comentario?

Por cierto, somos una empresa de tecnología (administramos un centro de datos) por lo que la alfabetización informática de mis compañeros de trabajo es alta.


La mayoría de las respuestas aquí no creo que realmente vayan a sorprender a nadie, especialmente a una multitud de tecnología. Pueden sorprenderse de que Perl pueda hacerlo, pero no van a sorprenderse de que pueda hacer la tarea. Sin embargo, incluso si no les sorprende que pueda hacerlo, se sorprenderán de la rapidez o la poca cantidad de código que puede lograr.

Si estás buscando cosas para mostrar que les sorprenderán, tienes que descubrir lo que piensan que es difícil en sus trabajos y ver si Perl podría hacerlo realmente fácil. Encuentro que a las personas no les importa si un idioma puede hacer algo que ya no les interesa. Dicho esto, impresionar a cualquiera con Perl es lo mismo que impresionar a cualquier persona en cualquier otro tema: debes conocerlos. y por lo que quedarán impresionados. Tienes que conocer a tu audiencia

Perl realmente no tiene ninguna característica especial que le permita hacer algo que otro idioma también puede hacer. Sin embargo, Perl combina muchas características que generalmente no encuentras en el mismo lenguaje de programación.

La mayoría de las cosas que me impresionan casi no tienen nada que ver con el lenguaje:

  • Hay una única base de código que se ejecuta en un par de cientos de plataformas diferentes, a pesar de las diferencias en la arquitectura.

  • El CPAN de Perl aún no tiene rival entre otros idiomas (lo cual es realmente triste porque es muy fácil hacer lo mismo para otros idiomas).

  • La cultura de las pruebas realmente ha elevado el listón en la programación de Perl, y hay mucho trabajo que provoca dependencias de plataforma, problemas de módulos cruzados, etc. sin que el desarrollador original tenga que hacer mucho.


Alguna combinación de raspado de pantalla, interacción con programas externos y análisis de un archivo de texto realmente rápido impresionaría a las personas. El ejemplo dado por Squook definitivamente encajaría en la cuenta.

Por otro lado, ¿por qué no usarlo en su trabajo diario, escribir herramientas tremendamente útiles que todos los demás usan y explicar a las personas que usted creó las herramientas en Perl? De esa manera, obtendrá cosas útiles para el trabajo, y la gente en su lugar de trabajo seguramente apreciaría el valor de hacer el trabajo . :)


Demuestre la manipulación de datos complejos con un trazador de líneas único, como el análisis de un registro del servidor web y errores 404, y luego otro delineador de líneas para eliminar los enlaces rotos de una colección de documentos HTML ...

Enseñé un taller de Perl a un grupo de administradores de sistemas de largo plazo una vez, y vieron el mayor valor cuando vieron cómo podían usar trucos de programación reales como modularización y estructuras de datos para mejorar sus scripts de shell, de una manera que tenía continuidad con lo que ellos ya sabían En un entorno Windows, demostraría manipular estructuras de archivos de gran tamaño, permisos y el Registro, porque todo el mundo siempre necesita ese tipo de cosas y Perl es mucho más sólido que los archivos por lotes, etc.


Después de mostrarles search.cpan.org (y explicar el concepto de CPAN), muéstreles cualquiera de los siguientes:

Luego volar sus mentes con un combo sort / map / grep (también conocido como Transformación Schwarzian ) que hace más trabajo en 1 línea de código que lo que podría en 50 líneas de C #.

Muéstreles hilos y tenedores , luego compárelos con el mismo código necesario para realizar el mismo trabajo en Java o C #.

Si no se dejan impresionar por el hecho de que Perl ha tenido durante años los mismos modismos que C # acaba de presentar, entonces no sé qué decir.


En el lado frívolo y entretenido, la entrada de Damian Conway en el tercer concurso de Perl ofuscado, SELFgol realizó 4 tareas

* Its a quine (when executed, prints an exact copy of itself) * Turns other programs into quines * Plays Conway''s Game of Life * Animates a marquee banner

Y todo esto en menos de 1000 caracteres. Bastante entretenido.



Primero pensé: App :: Asciio ( ver un screencast )

Segundo pensamiento: es difícil demostrar cosas sin un estuche pequeño y ajustado. En lugar de inventarlos, puede pedir prestado a otros para mostrar la elegancia de Perl.

Una opción sería las soluciones para los juegos de scripting de Microsoft. Jan Dubois de ActiveState proporcionó soluciones con comentarios que podría usar / adaptar. (Personalmente, descubrí que muchas de mis soluciones tenían mucho menos código, por lo que es posible que desee editarlas y hacer que Perl parezca aún más elegante).

Otra opción podría estar pasando por algunas de las columnas de Randal Schwartz . Hay algunas gemas allí. (Por ejemplo, digitarme con Twitter )

En cuanto a las aplicaciones, Perl :: Critic es bastante impresionante. Como es ack .



Dado que la mayoría de los lenguajes de programación son bastante comparables en el nivel ¿cómo-rápidamente-puede-implementar-algo, tal vez podría "sorprenderlos" con la solidez y la valía de la plataforma Perl? Aquí hay algunas estadísticas interesantes sobre cuán bien probados están los módulos de distribución y CPAN de Perl. El CPAN es una creación increíble también, con sus sitios web asociados de documentación, búsqueda, revisión, anotación y seguimiento de errores. CPAN Testers es definitivamente la guinda del pastel: una colección de probadores en múltiples plataformas y versiones de Perl.


Mis módulos Acme favoritos son Acme :: Eyedrops y Acme :: Bleach. Bueno para el alivio de la luz.


Siempre digo lo mismo, pero para mostrar a las personas la utilidad de CPAN, les presento el problema de analizar el texto en inglés en sus oraciones componentes.

Una audiencia inteligente presentada con ese problema probablemente dirá "Simplemente divídame en un punto". A continuación, comenzarán a presentarse casos límite y problemas. Las paradas completas aparecen en todo tipo de otros lugares; las oraciones terminan con signos de interrogación y exclamaciones y tres puntos finales finales ... ¿Qué pasa con el punto final o! o? seguido de espacio, no pero eso no funcionará porque podría ser seguido por EOF, etc. etc.

Si prepara un texto complicado con todos esos casos extremos, podrá derribar todas las soluciones propuestas simplemente señalando un ejemplo. Luego lo analizará con Lingua :: En :: Sentence.

No es llamativo en el sentido que podría querer decir, pero muestra el poder de un módulo escrito por personas que han pasado por todos los problemas que recién ahora le están ocurriendo a su audiencia, y los resolvió.


Creo que CPAN es bastante impresionante en sí mismo. La facilidad de instalación de los nuevos módulos es muy buena, así como el hecho de que están todos allí.

Y luego combinar módulos para hacer cosas geniales: generar RSS (o Atom) a partir de prácticamente cualquier dato que pase, usando GraphViz :: * para generar imágenes bonitas (tm).

También puede consultar los tutoriales de algunos de los módulos de tipo de marco grande, Catalyst o POE, por ejemplo, tienen algunas cosas bastante ingeniosas que puede hacer con poco código.

Si la cultura local no es demasiado tensa, algunos de los módulos Acme :: * ( Acme :: Bleach, por ejemplo) son bastante ingeniosos y seguramente te harán reír.

Finalmente, usando XML :: Twig, por supuesto, una línea que le da la tasa de cambio actual entre el dólar y el euro:

perl -MXML::Twig -l -e''print XML::Twig->parse( "http://www.x-rates.com")->first_elt(q{a[@href="/d/USD/EUR/graph120.html"]})->text''

Es bastante fácil adaptarlo a los datos de desecho de otro sitio web.


Hace años, cuando estaba aprendiendo a programar, el primo de mi novia me mostró un script de Perl que había contactado una base de datos que contenía las posiciones de todos los satélites conocidos, y calculó los tiempos de sobrevuelo de los objetos más grandes, como la estación espacial Mir. La secuencia de comandos se ejecutó a través de cron en un servidor que ejecutó, y se ejecutaría periódicamente y luego le enviaría una página unos 5 minutos antes de que el objeto dado se viera sobre su cabeza en el cielo nocturno. Mientras caminábamos por la ciudad, él pudo llamar la atención de todos al señalar repentinamente y decir "¡MIRAR!", Y todos aplaudieron y caminaron hacia la derecha mientras el satélite volaba sobre sus cabezas.

Realmente me impresionó ese guión en ese momento, ya que no tenía idea de cómo escribir un programa tan complejo. Ahora que tendría una idea mucho mejor, todavía creo que fue una buena demostración, ya que mostró algo novedoso que se podía hacer con el lenguaje en un tiempo relativamente corto y con poco sudor. Así que yo diría que escogáis algo novedoso o interesante y enfatizo la economía de lenguaje de Perl y sus capacidades de trabajo en red.


Si quisieras usar Image :: Magick , podrías hacer un script rápido que podría convertir una imagen normal en arte ASCII. Ese sería un guión bastante rápido para hacer. Aplique el operador sobel y luego convierta el brillo resultante en valores ASCII. De hecho, he hecho esto en Python: ejemplo .


Si se encuentra en un centro de TI, probablemente tenga varias computadoras alrededor ... mini computadoras , mainframes , PC, etc.

¿Qué tal un script que se publica y obtiene algún tipo de información sobre estas máquinas, que su personal de TI necesita, y lo sirve bien en algún formato HTML?

Hace mucho tiempo, tenía 15 servidores basados ​​en TCP / IP que hacían algo para varios clientes. Arreglé un script de Perl que extraía los parámetros para cada uno de los servidores e inserté esta información en una nueva hoja de cálculo de Excel, una pestaña por servidor. Luego lo puso en un servidor de archivos en algún lugar donde todos podrían examinarlo. Ahorró mucho tiempo para las personas que estaban apoyando los servidores.

Mire a su alrededor en busca de una situación en la que pueda hacerles la vida más fácil al reducir el trabajo pesado manual. Creo que esa es tu mejor apuesta.


Una de las mejores cosas para mí es usar Perl para la generación de código. Especialmente cuando se trata de otros idiomas. He escrito varios scripts pequeños para generar clases C ++ y código Java.

Cuando era un neófito de Perl. Escribí este fragmento de código, que generó archivos de esquema basados ​​en nuestra base de datos. Alrededor de 2 horas después descubrí que no necesitaba hacer esto para DBIx :: Class . Este no es un gran código de Perl (no me votes por él. Es solo un ejemplo), pero generó exactamente 200 archivos de esquema para mí.

my @db = `mysql -u XXXXX -pXXXXX --skip-column-names -e "show databases;"`; foreach my $db_name (@db) { chomp($db_name); my @tables = `mysql -u XXXXX -pXXXXX --skip-column-names -e "use $db_name; show tables;"`; $_ =~ s//n// foreach(@tables); unless ( -e "$db_name.pm") { open(DBFILE, ''>'', "$db_name.pm"); print DBFILE "package mysql::schemes::$db_name;/n"; print DBFILE "use base qw/DBIx::Class::Schema/;/n/n"; print DBFILE ''__PACKAGE__->load_classes(qw/'' . join('' '', @tables) . "/);/n/n"; print DBFILE "1;"; close(DBFILE); } mkdir $db_name unless ( -d $db_name or -e $db_name ); foreach my $table_name (@tables) { my @columns = `mysql -u XXXX -pXXXX --skip-column-names -e "USE $db_name; desc ///`$table_name///`;"`; $_ =~ s//n$// foreach(@columns); my (@names, $primary_key); foreach (@columns) { my ($name, $type, $null, $key, $default) = split(//t/, $_); chomp($default); push(@names, $name); $primary_key = $name if($key ne ''''); } unless ( -e "$db_name/$table_name.pm" ) { open(TBFILE, ''>'', "$db_name/$table_name.pm"); print TBFILE "package mysql::schemes::" . $db_name . "::" . $table_name . ";/n"; print TBFILE "use base qw/DBIx::Class/;/n/n"; print TBFILE "__PACKAGE__->load_components(qw/PK::Auto Core/);/n"; print TBFILE "__PACKAGE__->table(''$table_name'');/n"; print TBFILE "__PACKAGE__->add_columns(qw/" . join('' '', @names) . "/;/n"; print TBFILE "__PACKAGE__->set_primary_key(''$primary_key'');/n/n" unless($primary_key eq ''''); print TBFILE "1;"; close(TBFILE); } } }


Esto se hace en perl para win32 http://www.unix.gr/FLOSSeavesDrop.exe

Es una ayuda de auditoría de pantalla remota. Ejecútelo en una PC con Windows, y luego puede monitorear su pantalla principal con solo un navegador web. Dirigirse a su navegador en la IP de la PC en el puerto 42000