2009-03-04 10 views
16

Vorrei fare una presentazione per i miei colleghi che mostreranno alcune cose straordinarie che Perl può fare, cose che avrebbero fatto dire a se stessi programmatori e non-programmatori: "WHOA puoi farlo ?!" Voglio davvero girare la testa, dato che molti pensano che Perl sia un linguaggio morente, ma che sia anche divertente e divertente.Come posso impressionare le persone con le capacità di Perl?

Alcune idee che ho sono demo dei seguenti moduli:

Tutti i consigli o commenti?

BTW siamo un'azienda tecnologica (gestisci un data center), quindi l'alfabetizzazione informatica dei miei colleghi è elevata.

+3

Francamente, sarei stupito se vedessi il codice Perl che non sembrava che qualcuno avesse vomitato sullo schermo;) –

+6

Kent, gratis gratis per guardare uno qualsiasi dei miei codice su CPAN, quindi. –

risposta

10

Credo che CPAN sia piuttosto impressionante in sé e per sé. La facilità di installazione dei nuovi moduli è piuttosto buona, così come il fatto che sono tutti lì.

E quindi combinare i moduli per fare cose interessanti: generare RSS (o Atom) da praticamente tutti i dati che passano, usando GraphViz::* per generare belle immagini (tm).

Si potrebbe anche guardare le esercitazioni di alcuni dei grandi moduli di tipo framework, Catalyst o POE, ad esempio, hanno alcune cose piuttosto belle che si possono fare con un piccolo codice.

Se la cultura locale non è troppo rigida, alcuni dei moduli Acme :: * (Acme::Bleach per esempio) sono abbastanza intelligenti e sicuri di farti ridere.

Infine, utilizzando XML::Twig naturalmente, una battuta che ti dà il tasso di cambio corrente tra il dollaro e l'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' 

E 'abbastanza facile da adattarlo a scartare i dati da un altro sito.

+0

Buone idee, grazie, l'Acme :: Bleach mi ha ricordato Acme :: EyeDrops che mi piace – mcsnolte

+0

http://search.cpan.org/dist/Acme-Bleach –

19

Anni fa, quando stavo imparando a programmare, il cugino della mia ragazza mi mostrò uno script Perl che aveva scritto che contattava un database contenente le posizioni di tutti i satelliti conosciuti e calcolava i tempi di sorvolo per gli oggetti più grandi, come la stazione spaziale Mir. Lo script correva via cron su un server che gestiva, e veniva eseguito periodicamente e quindi gli mandava una pagina circa 5 minuti prima che l'oggetto dato fosse visibile nel cielo notturno. Mentre stavamo camminando per la città, poteva attirare l'attenzione di tutti indicando improvvisamente e dicendo "GUARDA!", E tutti hanno oooh e ahhhh proprio mentre il satellite sorvolava.

Sono rimasto davvero colpito da quella sceneggiatura in quel momento, poiché non avevo idea di come scrivere un programma quasi così complesso. Ora che avrei avuto un'idea molto migliore, continuo a pensare che fosse una buona dimostrazione, poiché mostrava qualcosa di nuovo che poteva essere fatto con la lingua in un tempo relativamente breve e con poco sudore. Quindi direi di scegliere qualcosa di nuovo o interessante, e sottolineare l'economia del linguaggio di Perl e le sue capacità di rete.

+0

Puoi chiedere al tuo amico quella sceneggiatura? Voglio solo apparire così bello (nelle giuste cerchie) – Richard

+0

scusate, non posso farlo. ;) Questo è stato circa 10 anni fa, e da allora quella gf è una ex-gf con cui ho da tempo perso il contatto. –

+0

Ho il dubbio che un satellite possa essere visto ad occhio nudo (non ho dubbi che la sceneggiatura possa essere scritta). – jfs

5

Alcune combinazioni di screen-scraping, interazione con programmi esterni e analisi di un file di testo molto rapido impressionerebbero le persone. L'esempio dato da Squook sarebbe sicuramente adatto al conto.

D'altra parte, perché non utilizzarlo solo nel lavoro quotidiano, scrivere strumenti straordinariamente utili che chiunque altro usa e spiegare alle persone che hai realizzato gli strumenti in Perl? In questo modo stai facendo cose utili per il lavoro, e le persone sul tuo posto di lavoro apprezzerebbero sicuramente il valore di e il lavoro svolto. :)

2

Se si desidera utilizzare Image::Magick, è possibile eseguire uno script rapido che potrebbe trasformare un'immagine normale in arte ASCII. Sarebbe uno script abbastanza veloce da fare. Applicare lo sobel operator e quindi convertire la luminosità risultante in valori ASCII. L'ho fatto in Python: example.

5

Una delle cose più interessanti per me è usare Perl per la generazione del codice. Soprattutto quando arrivano altre lingue. Ho scritto diversi piccoli script per generare classi C++ e codice Java.

Indietro quando ero un neofita Perl. Ho scritto questo pezzo di codice, che ha generato file di schemi basati sul nostro database. Circa 2 ore dopo ho scoperto che non avevo bisogno di farlo per DBIx::Class. Questo non è un grande codice Perl (non votarmi per questo, è solo un esempio), ma ha generato esattamente come 200 file di schema per me.

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); 
      } 
    } 
} 
3

Dimostrare la manipolazione di dati complessi con un uno di linea, come l'analisi di un log del server web e per errori 404, poi un altro oneliner per rimuovere i collegamenti interrotti da una raccolta di documenti HTML ...

ho insegnato un workshop di Perl a un gruppo di amministratori di sistema una volta, e hanno visto il massimo valore quando hanno visto come potevano usare trucchi di programmazione reali come la modularizzazione e le strutture dati per migliorare i loro script di shell, in un modo che aveva continuità con quello già conosciuto. In un ambiente Windows dimostrerei di manipolare grandi strutture di file, permessi e il Registro, perché tutti hanno sempre bisogno di quel genere di cose e Perl è molto più robusto dei file batch, ecc.

0

Sul lato frivolo e divertente, l'ingresso di Damian Conway nel terzo concorso Perl offuscato, SELFgol eseguito 4 task

* 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 

E tutto questo in meno di 1000 caratteri. Abbastanza divertente.

6

Dopo mostrando loro search.cpan.org (e spiega il concetto di CPAN), esse mostrano una delle seguenti operazioni:

Poi soffiare le loro menti con una sorta/map/grep combo (noto anche come Schwarzian Transform) che fa più lavoro su una riga di codice di quanto potresti in 50 righe di C#.

Mostrateli threads e forks, quindi confrontatelo con lo stesso codice necessario per eseguire lo stesso lavoro in Java o C#.

Se non vengono spazzati via dal fatto che Perl ha avuto per anni gli stessi modi di dire che C# è solo ora introducendo, quindi non so cosa dire.

+0

+1 per avermi fatto scoprire Imager. –

+0

Sembra che tu stia rompendo molto C#. Schwartzian Transform in 1 riga di C# con LINQ (questo è per i file): files.Sort ((x, y) => GetDate (x) .CompareTo (GetDate (y))); Threads usi semplicemente System.Threading, che fornisce quantità di codice simili per fare lo stesso dei thread di perl - o semplicemente usa costrutti come delegati con il loro metodo BeginInvoke() o (ora in C# 4) la libreria delle attività e controlli di alto livello come Parallel.Per() e altri per ridurre il codice necessario al di sotto di quello della gestione manuale dei thread. Spero che Perl abbia avuto caratteristiche più lunghe di C#, considerando che Perl ha 22 anni e solo C# 8. –

+1

@Callum Rogers: il punto di JDrago è che C# non aveva inizialmente queste caratteristiche, mentre Perl ne aveva 15 anni fa. Lo scopo è probabilmente quello di infastidire i Lispers tra di noi. – reinierpost

1

Primo pensiero: App::Asciio (see a screencast)

secondo pensiero: E 'difficile demo cose senza un piccolo, caso stretto. Piuttosto che inventarli, potresti prendere in prestito dagli altri per mostrare l'eleganza di Perl.

Un'opzione sarebbe la soluzione per Microsoft Scripting Games. Jan Dubois di ActiveState ha fornito solutions with commentary che è possibile utilizzare/adattare. (Personalmente, ho scoperto che molte delle mie soluzioni richiedevano molto meno codice, quindi potresti volerle modificare e rendere Perl ancora più elegante.)

Un'altra opzione potrebbe essere quella di passare a Randal Schwartz's columns. Ci sono alcune gemme lì dentro. (Ad esempio Fingering myself with Twitter)

Come per le applicazioni, Perl::Critic è davvero fantastico. Come è ack.

0

Se si è in un centro IT, probabilmente avete un numero di computer intorno ... mini computers, mainframes, PC, ecc

ne dite di uno script che va fuori e ottiene una sorta di informazioni su queste macchine, che il tuo personale IT ha bisogno, e lo rendono bello in qualche formato HTML.

Molto tempo fa, avevo 15 server basati su TCP/IP che facevano qualcosa per vari client. Ho creato uno script Perl che estraeva i parametri per ciascuno dei server e ha inserito queste informazioni in un nuovo foglio di calcolo di Excel, una scheda per server. Poi lo mise su un file server da qualche parte dove tutti potevano esaminarlo. Ha risparmiato un sacco di tempo per le persone che stavano supportando i server.

Cerca una situazione in cui puoi semplificarti la vita riducendo il lavoro manuale. Penso che sia la soluzione migliore.

0

Dal momento che la maggior parte dei linguaggi di programmazione è abbastanza simile a livello di implementazione rapida, è possibile "stupirli" con la solidità e la dignità della piattaforma Perl? Qui ci sono some interesting statistics su quanto ben collaudati sono la distribuzione Perl ei moduli CPAN. Anche il CPAN è una creazione straordinaria, con i relativi siti Web associati a documentazione, ricerca, revisione, annotazione e tracciamento dei bug. CPAN Testers è sicuramente la ciliegina sulla torta: una collezione di tester su più piattaforme e versioni Perl.

4

Dico sempre la stessa cosa, ma per mostrare alle persone l'utilità di CPAN, vorrei presentare loro il problema di analizzare il testo inglese nelle sue frasi componenti.

Un pubblico intelligente presentato con questo problema probabilmente dirà "Just split on a full stop". Quindi inizieranno a verificarsi casi e problemi ai bordi. Gli arresti completi compaiono in tutti i tipi di altri posti; le frasi terminano con punti interrogativi ed esclamazioni e tre stop completi finali ... che dire di punto e basta! o ? seguito da spazio, no ma non funzionerà perché potrebbe essere seguito da EOF, ecc. ecc.

Se si prepara un testo complicato con tutti i casi limite, sarà possibile abbattere tutti le loro soluzioni proposte semplicemente indicando un esempio. Quindi lo si analizzerebbe con Lingua :: En :: Sentence.

Non è appariscente nel senso in cui potresti voler dire, ma mostra la potenza di un modulo scritto da persone che hanno affrontato tutti i problemi che solo ora stanno accadendo al tuo pubblico e li hanno risolti.

+0

In realtà, se si verifica un puntino di sospensione alla fine di una frase, si suppone che abbia quattro punti fermi .... Tre è per ... frase ellissi interne. – jcdyer

0

I miei moduli Acme preferiti sono Acme :: Eyedrops and Acme :: Bleach. Buono per un leggero sollievo.

1

La maggior parte delle risposte qui non credo che stiano per stupire nessuno, soprattutto una folla di tecnici. Potrebbero essere sorpresi che Perl possa farlo, ma non saranno sorpresi dal fatto che tu possa fare il compito. Tuttavia, anche se non sono sorpresi che tu possa farlo, potrebbero essere sorpresi di quanto velocemente, o con quanto poco codice, puoi farlo.

Se stai cercando cose che mostrino loro che li sorprenderanno, devi capire cosa pensano sia difficile nel loro lavoro e vedere se Perl potrebbe renderlo davvero facile. Trovo che le persone tendano a non preoccuparsi se una lingua può fare qualcosa a cui non hanno già un interesse. Detto questo, impressionare chiunque con Perl è come impressionare chiunque in qualsiasi altro argomento di campo: devi conoscerli e di cosa saranno impressionati. Devi conoscere il tuo pubblico.

Perl non ha davvero nessuna caratteristica speciale che gli consenta di fare qualsiasi cosa che anche altre lingue possano fare. Tuttavia, Perl combina molte funzionalità che di solito non si trovano nello stesso linguaggio di programmazione.

La maggior parte delle cose che sono impressionato da non hanno quasi nulla a che fare con la lingua:

  • C'è un'unica base di codice che viene eseguito su un paio di centinaia di piattaforme diverse, nonostante le differenze di architettura.

  • Perl's CPAN è ancora senza rivali tra le altre lingue (il che è molto triste perché è così facile fare la stessa cosa per altre lingue).

  • La cultura del testing ha davvero alzato il livello nella programmazione Perl, e c'è un sacco di lavoro che mette in evidenza le dipendenze della piattaforma, i problemi tra i moduli e così via senza che lo sviluppatore originale debba fare molto.

3

Questo viene fatto in Perl per Win32 http://www.unix.gr/FLOSSeavesDrop.exe

È un aiuto schermata controllo remoto. Eseguirlo su un PC Windows, e quindi è possibile monitorare il suo display principale con un semplice browser web. Indirizza il tuo browser sulla porta IP del PC 42000

Problemi correlati