Pit2012 modern perl

587 views
530 views

Published on

Introduzione a Modern Perl di Mario Rossano aka Anak, seminario svolto durante "Pinguino in Tour 2012" organizzato dal NaLUG (www.nalug.net), presso la Facoltà di Ingegneria Informatica, Università Federico II di Napoli, con il patrocinio della Presidenza della facoltà

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
587
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Pit2012 modern perl

  1. 1. PIT 2012: Workshop@UniNA Facoltà di Ingegneria, Univ. Federico II di Napoli, 14/05/2012 Introduzione a Modern::Perl - a cura di Mario Rossano aka Anak -con il patrocinio del Preside della Facoltà di Ingegneria dellUniversità degli Studi di Napoli Federico II: Prof. Piero Salatino e con il sostegno del Prof. Antonio Pescapè Comics Unina Research Group
  2. 2. PIT 2012: Workshop@UniNA• Il linguaggio PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  3. 3. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili specialiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  4. 4. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• SintassiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  5. 5. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi • Gli operatori: logici e comparativi • Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicliIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  6. 6. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi Gli operatori: logici e comparativi Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/OutputIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  7. 7. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi • Gli operatori: logici e comparativi • Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolariIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  8. 8. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi Gli operatori: logici e comparativi Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• SubroutineIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  9. 9. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi Gli operatori: logici e comparativi Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• Subroutine• Package e ModuliIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  10. 10. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi • Gli operatori: logici e comparativi • Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• Subroutine• Package e Moduli• Programmazione ad oggettiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  11. 11. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi Gli operatori: logici e comparativi Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• Subroutine• Package e Moduli• Programmazione ad oggetti• DatabaseIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  12. 12. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi Gli operatori: logici e comparativi Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• Subroutine• Package e Moduli• Programmazione ad oggetti• Database• CPAN e moduli di rilievoIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  13. 13. PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• Sintassi • Gli operatori: logici e comparativi • Altri operatori, numerici e funzioni • Le istruzioni condizionali • Iteratori • Controllo sui cicli• Input/Output• Espressioni regolari• Subroutine• Package e Moduli• Programmazione ad oggetti• Database• CPAN e moduli di rilievo• Modern::PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  14. 14. PIT 2012: Workshop@UniNA• Il linguaggio PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  15. 15. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report LanguageIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  16. 16. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report LanguageIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  17. 17. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish ListerIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  18. 18. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish ListerIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  19. 19. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive LambdasIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  20. 20. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive LambdasIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  21. 21. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERLIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  22. 22. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERLIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  23. 23. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERL PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  24. 24. PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERL Perl È il nome del linguaggio, non un acronimoIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  25. 25. PIT 2012: Workshop@UniNA• Il linguaggio PerlCome ha detto Larry Wall (creatore del Perl):”There is More Than One Way To Do It””Cè più di un modo per farlo”Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  26. 26. PIT 2012: Workshop@UniNA• Il linguaggio PerlCome ha detto Larry Wall (creatore del Perl):”There is More Than One Way To Do It””Cè più di un modo per farlo”Perl permette una notevole libertà espressiva, simile al linguaggio naturale.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  27. 27. PIT 2012: Workshop@UniNA• Il linguaggio PerlCome ha detto Larry Wall (creatore del Perl):”There is More Than One Way To Do It””Cè più di un modo per farlo”Perl permette una notevole libertà espressiva, simile al linguaggio naturale.E possibile integrare codice scritto in C ed in altri linguaggi, tramite i moduli Inline::*Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  28. 28. PIT 2012: Workshop@UniNA• Il linguaggio PerlCome ha detto Larry Wall (creatore del Perl):”There is More Than One Way To Do It””Cè più di un modo per farlo”Perl permette una notevole libertà espressiva, simile al linguaggio naturale.E possibile integrare codice scritto in C ed in altri linguaggi, tramite i moduli Inline::*Non è interpretato, bensì trasformato in bytecode che viene poi eseguito.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  29. 29. PIT 2012: Workshop@UniNA• Il linguaggio PerlSui sistemi *NIX è quasi certamente già installato (99.99%), diversamente:apt-get install perlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  30. 30. PIT 2012: Workshop@UniNA• Il linguaggio PerlSui sistemi *NIX è quasi certamente già installato (99.99%), diversamente:apt-get install perlSu Windows sono disponibili:Activestate Perl → http://www.activestate.com/activeperlStrawberry Perl → http://strawberryperl.com/Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  31. 31. PIT 2012: Workshop@UniNA• Il linguaggio PerlPer avere un aiuto:Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  32. 32. PIT 2012: Workshop@UniNA• Il linguaggio PerlPer avere un aiuto:perldoc ($ apt-get install perl-doc)mongers@perl.it (mailing list)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  33. 33. PIT 2012: Workshop@UniNA• Il linguaggio PerlPer avere un aiuto:perldoc ($ apt-get install perl-doc)mongers@perl.it (mailing list)#perl.it (irc su freenode.net)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  34. 34. PIT 2012: Workshop@UniNA• Il linguaggio PerlPer avere un aiuto:perldoc ($ apt-get install perl-doc)mongers@perl.it (mailing list)#perl.it (irc su freenode.net)www.perlmonks.orgIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  35. 35. PIT 2012: Workshop@UniNA• Sintassi Perl ha una sintassi derivata dal linguaggio C I blocchi sono delimitati da parentesi graffe { BLOCK { …; …; ... Il delimitatore di fine istruzione è il punto e virgola ; }Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  36. 36. PIT 2012: Workshop@UniNA• Struttura dei datiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  37. 37. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  38. 38. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  39. 39. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalareIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  40. 40. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalare@ → arrayIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  41. 41. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalare@ → array% → hashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  42. 42. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalare → può contenere un singolo valore di qualunque tipo (stringa, nun, ...)@ → array% → hashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  43. 43. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalare → può contenere un singolo valore di qualunque tipo (stringa, nun, ...)@ → array →può contenere una lista ordinata di scalari% → hashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  44. 44. PIT 2012: Workshop@UniNA• Struttura dei datiIn Perl i nomi delle variabili sono preceduti da un carattere detto: SYGILCi sono tre SYGIL e riflettono la struttura della variabile:$ → scalare → può contenere un singolo valore di qualunque tipo (stringa, nun, ...)@ → array →può contenere una lista ordinata di scalari% → hash → associa una lista non ordinata di chiavi (stringa) a scalari, array o hashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  45. 45. PIT 2012: Workshop@UniNA• Struttura dei dati: esempiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  46. 46. PIT 2012: Workshop@UniNA• Struttura dei dati: esempi$scalare=7;$scalare=NaLUG;$scalare=7;$scalare=1.32e-10;$scalare=0xdeadbeaf;$scalare=0b0001010;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  47. 47. PIT 2012: Workshop@UniNA• Struttura dei dati: esempi$scalare=7; @array=(7,NaLUG,7,1.32e-10,0xdeadbeaf,0b0001010);$scalare=NaLUG; @array = ( [1, 2, 3],$scalare=7; [4, 5, 6],$scalare=1.32e-10; [7, 8, 9]$scalare=0xdeadbeaf; );$scalare=0b0001010;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  48. 48. PIT 2012: Workshop@UniNA• Struttura dei dati: esempi$scalare=7; @array=(7,NaLUG,7,1.32e-10,0xdeadbeaf,0b0001010);$scalare=NaLUG;$scalare=7; $array[0] → 7; $array[1] → Nalug;...$scalare=1.32e-10;$scalare=0xdeadbeaf; @array = ( [1, 2, 3],$scalare=0b0001010; [4, 5, 6], [7, 8, 9] ); $array[0][0] → 1; $array[1][2] → 6; %hash={...}Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  49. 49. PIT 2012: Workshop@UniNA• Struttura dei dati: esempimy $scalare="prova";my @array=(0,1,2);my %hash=( chiave1 => stringa, chiave2 => $scalare, chiave3 => [@array], chiave4 => [0,2,testo], chiave5 => [ { flintstones => Fred, goldrake => [Actarus,Alcor] }, ],);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  50. 50. PIT 2012: Workshop@UniNA• Struttura dei dati: esempimy $scalare="prova"; say $hash{chiave1};my @array=(0,1,2); stringamy %hash=( say $hash{chiave3}[1]; chiave1 => stringa, 1 chiave2 => $scalare, say $hash{chiave4}[2]; chiave3 => [@array], testo chiave4 => [0,2,testo], chiave5 => [ say $hash{chiave5}[0]{flintstones}; { Fred flintstones => Fred, goldrake => [Actarus,Alcor] say $hash{chiave5}[0]{goldrake}[1]; }, Alcor ],);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  51. 51. PIT 2012: Workshop@UniNA• Struttura dei dati: funzioni su array ed hashpop ARRAY → rimuove e restituisce lultimo valore dellarraypush ARRAY,LISTA → aggiunge alla fine di array i valori di listashift ARRAY → rimuove e restituisce il primo elemento di arraysplice ARRAY,SCOSTAMENTO, LUNGHEZZA,LISTA → rimuove da ”array” a partire da ”scostamento” per la ”lunghezza” e li sostituisce (se ci sono) con quelli di ”lista”. Se ”scostamento” è negativo, loperazione è fatta a partire dalla fine dellarrayjoin ESPR,LISTA → trasforma una lista o un array in una stringa, con gli elementi separati da ”espr”Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  52. 52. PIT 2012: Workshop@UniNA• Struttura dei dati: funzioni su array ed hashsort LISTA → effettua un ordinamento dei dati sort{$a cmp $b} @file # lessicale sort{$a <=> $b} @file # numericoreverse LISTA → capovolge una listakeys HASH → restituisce un array contenente le chiavi dellhashvalues HASH → restituisce un array contenente i valori dellhashmy %settimana=( Es. Lun => Mon, Mar => Tue, foreach $chiave(keys(%settimana)) { Mer => Wed, say ”$settimana{$chiave}” Gio => Thu, } Ven => Fri, Sab => Sat, Dom => Sun)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  53. 53. PIT 2012: Workshop@UniNA• Struttura dei dati: variabili speciali – v.http://perldoc.perl.org/perlvar.html$_ → contiene il default input. Ad es. In un ciclo, se non specificato diversamente Perl usa $_ come valore. for (1..20) say $_;$PROCESS_ID or $PID or $$ → numero del processo in cui gira il Perl script$PROGRAM_NAME or $0 → nome del programma in esecuzione$a e $b → quando sono usate nella funzione sort, non vanno dichiarate@ARGV → array degli argomenti passati allo script da shell$OSNAME or $^O → nome OS su cui gira Perl$PERL_VERSION or $^V→ versione di Perl in esecuzione$ERRNO or $! → contiene informazioni sullerrore di esecuzioneIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  54. 54. PIT 2012: Workshop@UniNA• Sintassi: gli operatori logici e comparativi Operatori logici binari AND bassa priorità → && AND alta priorità → and OR bassa priorità → || (ASCII 124) OR alta priorità → or XOR bassa priorità → ^ XOR alta priorità → xor Operatore logico unario NOT bassa priorità →! NOT alta priorità → notIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  55. 55. PIT 2012: Workshop@UniNA• Sintassi: gli operatori logici e comparativi Operatori di comparazione Numeri Stringhe > gt maggiore di >= ge maggiore o uguale di < lt minore di <= le minore o uguale di == eq uguale a != ne diverso <=> cmp comparazione, ritorna -1, 0 oppure 1 Es. $a<=>$b Se $a<$b → -1 se $a=$b → 0 se $a>$b → 1Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  56. 56. PIT 2012: Workshop@UniNA• Sintassi: altri operatori, numerici e funzioni Operatori numerici Funzioni matematiche (altre su mod. Math::Trig;) Addizione + Valore assoluto abs Sottrazione - Arcotangente atan2 Moltiplicazione * Coseno cos El. a potenza ** Esponenziale exp Esadecimale hex → hex 0xAf stampa 175 Parte intera int → non arrotonda Logaritmo nat. log → in b.10 log($n)/log(10) Ottale oct Random rand Seno sin Radice quadrata sqrt (Math::Complex per i neg.)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  57. 57. PIT 2012: Workshop@UniNA• Sintassi: altri operatori, numerici e funzioni Operatori stringa Funzioni su stringhe (principali) Concatenazione . chomp ($s)→ rimuove il newline in coda chop ($s) → rimuove lultimo carattere chr ($n) → restituisce il carattere nellinsieme length ($s) → lunghezza della stringa reverse ($s) → inverte la stringa substr ($s,start,end) → estrae una sottostringaIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  58. 58. PIT 2012: Workshop@UniNA• Le istruzioni condizionali If LOGICAL { If LOGICAL ? BLOCK : BLOCK BLOCK } elsif LOGICAL { BLOCK if LOGICAL BLOCK } else { BLOCK } switch LOGICAL given ($scalar) { case BLOCK when (/apples/) { BLOCK} case … when … else ... default { BLOCK} }Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  59. 59. PIT 2012: Workshop@UniNA• Gli iteratori ”cè più di un modo per farlo” for → for (my $counter=0;$counter<=$numerical;$counter++) {BLOCK} → for (0..$numerical) {BLOCK} my @lista; for LISTA {BLOCK} → for @lista {BLOCK} foreach LISTA {BLOCK} → foreach my $lista(@lista)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  60. 60. PIT 2012: Workshop@UniNA• Cicli condizionali while LOGICAL {BLOCK} → siamo dentro finché condizione è TRUE until LOGICAL {BLOCK} → siamo dentro finché condizione è FALSE do {BLOCK} while LOGICAL → siamo dentro finché condizione è TRUE do {BLOCK} until LOGICAL → siamo dentro finché condizione è FALSE do → garantisce che il ciclo verrà eseguito almeno una voltaIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  61. 61. PIT 2012: Workshop@UniNAControllo sui cicli• Sono interni al blocco e si applicano a tutti i cicli. Permettono di variare il comportamento del blocco senza intervenire sulla condizione di entrata. next redo lastIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  62. 62. PIT 2012: Workshop@UniNAControllo sui cicli• Sono interni al blocco e si applicano a tutti i cicli. Permettono di variare il comportamento del blocco senza intervenire sulla condizione di entrata. next → salta una iterazione del ciclo esempio: next if $salta eq true; redo lastIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  63. 63. PIT 2012: Workshop@UniNAControllo sui cicli• Sono interni al blocco e si applicano a tutti i cicli. Permettono di variare il comportamento del blocco senza intervenire sulla condizione di entrata. next → salta una iterazione del ciclo esempio: next if $salta eq true; redo → ripete ”lo stesso” ciclo senza modificare la condizione di entrata esempio: redo if $ripetimi eq true; # non modifica i contatori lastIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  64. 64. PIT 2012: Workshop@UniNAControllo sui cicli• Sono interni al blocco e si applicano a tutti i cicli. Permettono di variare il comportamento del blocco senza intervenire sulla condizione di entrata. next → salta una iterazione del ciclo esempio: next if $salta eq true; redo → ripete ”lo stesso” ciclo senza modificare la condizione di entrata esempio: redo if $ripetimi eq true; # non modifica i contatori last → termina immediatamente il ciclo esempio: last if $interrompi eq true;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  65. 65. PIT 2012: Workshop@UniNA• Input/Output SU FILE Modalità di apertura: open my $fileHandle,MODE,$fileName or die !$ < → lettura (default) > → scrittura (crea/sovrascrive il file) >> → append +> → lettura e scrittura (crea/sovrascrive il file) +< → lettura e scrittura +>> → append e lettura Chiusura: close $fileHandle;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  66. 66. PIT 2012: Workshop@UniNA• Input/Output SU FILE Lettura di un file: while (!eof($fileHandle)) { my $riga=<$fileHandle>; … ... } Scrittura in un file: print $fileHandle $qualchecosa.”n”Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  67. 67. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Larma letale di Perl è un linguaggio nel linguaggio. A cosa servono le espressioni regolari: . verificare la presenza di una stringa in unaltra . sostituire in un testo una parte di stringa con altra stringaIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  68. 68. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Matching: my $scalare =~ /regexp/ Substitution my $scalare =~ s/$scalare1/$scalare2/ Sintassi regexp: ^ inizio stringa $ fine stringa (…) gruppo caratteri [a-zA-Z] classe caratteri . jolly → qualsiasi carattere /g → globaleIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  69. 69. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Quantificatore Descrizione * Trova 0 o più volte (massimale) + Trova 1 o più volte (massimale) ? Trova 1 o 0 volte (massimale) {n} Trova esattamente n volte {n,} Trova almeno n volte (massimale) {n,m} Trova almeno n volte ma non più di m volte (massimale) *? Trova 0 o più volte (minimale) +? Trova 1 o più volte (minimale) ?? Trova 1 o 0 volte (minimale) {n,}? Trova almeno n volte (minimale) {n,m}? Trova almeno n volte ma non più di m volte (minimale)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  70. 70. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Caratteri speciali 1/2 0 Trova il carattere NULL (ASCII 0) NNN Trova il carattere indicato, in notazione ottale, fino a 377 a Trova il carattere BEL (quello che fa suonare lo speaker) b Trova il carattere BS (backspace) cX Trova il carattere CTRL-X (es.: cZ trova CTRL-Z) d Trova un numero D Trova un non-numero e Trova il carattere ESC (escape, da non confondersi col backslash) f Trova il carattere FF (form feed) n Trova il carattere NL (new line, CR sui Macintosh) r Trova il carattere CR (carriage return, NL sui Macintosh)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  71. 71. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Caratteri speciali 2/2 s Trova uno spazio (spazio, HT, NL, CR, FF) S Trova un non-spazio t Trova il carattere di tabulazione (HT) w Trova un carattere alfanumerico più lunderscore (_) W Trova un carattere che non sia un alfanumerico o un underscore x Trova i carattere indicato, in notazione esadecimale i case insensitive g globale (non esce al primo match)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  72. 72. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Per effettuare il matching di caratteri speciali (ad es. $, |, [, ), , /) occorre farli precedere da backslash: | # barra verticale [ # quadra aperta ) # tonda chiusa * # asterisco ^ # carat / # slash) # backslashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  73. 73. PIT 2012: Workshop@UniNA• Le espressioni regolari (REGEXP) Esempi: $testo=Anak dice: Trovami al PIT2012; if (trovami =~ /$testo/i) {BLOCK} $testo =~ s/trovami/è andato/i; → Anak dice: è andato al PIT2012 if ($testo =~ /^Anak/) {BLOCK}; → vero perchè $testo inizia con Anak $filename=PIT2012.pdf; If ($filename =~ /.[a-zA-Z]{3}$/) {BLOCK} → vero, estensione 3 char Verifica sintattica indirizzo email; /^([w-+.]+)@([w-+.]+).([w-+.]+)$/Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  74. 74. PIT 2012: Workshop@UniNA• Le subroutine Il pilastro della programmazione strutturata DRY: Dont Repeat Yourself Ogni qualvolta abbiamo una ripetizione di codice è il segno che dovremmo implementare una subroutine.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  75. 75. PIT 2012: Workshop@UniNA• Le subroutine Il pilastro della programmazione strutturata DRY: Dont Repeat Yourself Ogni qualvolta abbiamo una ripetizione di codice è il segno che dovremmo implementare una subroutine. Sygil &Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  76. 76. PIT 2012: Workshop@UniNA• Le subroutine Il pilastro della programmazione strutturata DRY: Dont Repeat Yourself Ogni qualvolta abbiamo una ripetizione di codice è il segno che dovremmo implementare una subroutine. Sygil & sub mySubroutine(PARAMETER,...) {BLOCK} Invocazione: &mySubroutine Come function: my $scalar or @array or %hash = mySubroutine(...);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  77. 77. PIT 2012: Workshop@UniNA• Package e ModuliI package sono collezioni di subroutine.Mentre le subroutine permettono di organizzare blocchi di codice, i packageSpingono questa granularità ad un livello più alto.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  78. 78. PIT 2012: Workshop@UniNA• Package e Moduli foreach my $element(@array) { BLOCK } { package nalug; my $variabileInterna=...; Sub nameSubroutine BLOCK } my $result=nalug::nameSubroutine(); my $variabileEsterna=$nalug::variabileInterna;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  79. 79. PIT 2012: Workshop@UniNA• Package e ModuliI moduli contengono package.Mentre le subroutine permettono di organizzare blocchi di codice ed i packagespingono questa granularità ad un livello più alto, i moduli contengono packagee costituiscono files esterni al nostro script.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  80. 80. PIT 2012: Workshop@UniNA• Package e ModuliI moduli contengono package.Mentre le subroutine permettono di organizzare blocchi di codice ed i packagespingono questa granularità ad un livello più alto, i moduli contengono packagee costituiscono files esterni al nostro script.Istruzione ”use” seguita dal nome qualificato del modulouse Crypt::FNA;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  81. 81. PIT 2012: Workshop@UniNA• Package e ModuliI moduli pragmatici – usa Perl responsabilmente!use strict;use warnings;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  82. 82. PIT 2012: Workshop@UniNA• Package e ModuliI moduli pragmatici – usa Perl responsabilmente!use strict;use warnings;strict → attiva controlli sullo scope delle variabili e la loro definizione. Obbliga, ad es. alluso di ”my”Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  83. 83. PIT 2012: Workshop@UniNA• Package e ModuliI moduli pragmatici – usa Perl responsabilmente!use strict;use warnings;strict → attiva controlli sullo scope delle variabili e la loro definizione. Obbliga, ad es. alluso di ”my”warnings → indica errori non fatali ma che è bene controllareIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  84. 84. PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  85. 85. PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiClassi → PackageIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  86. 86. PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiClassi → PackageMetodi → SubroutineIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  87. 87. PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiClassi → PackageMetodi → SubroutineD. Come creo un oggetto?Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  88. 88. PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiClassi → PackageMetodi → SubroutineD. Come creo un oggetto?R. Lo battezzo come tale.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  89. 89. PIT 2012: Workshop@UniNA • Programmazione ad oggetti package Qualche::Cosa;#costruttoresub new { my $class = shift; my $init = shift; my $self={}; bless $self,$class; $self->nome($init->{number}) return $self}Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  90. 90. PIT 2012: Workshop@UniNA • Programmazione ad oggetti package Qualche::Cosa;#costruttore #attributisub new { sub nome { my $class = shift; my $self=shift; my $init = shift; if (@_) { my $self={}; $self->{nome}=shift } bless $self,$class; return $self->{nome} } $self->nome($init->{number}) return $self Package Figlio;} use base Qualche::Cosa;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  91. 91. PIT 2012: Workshop@UniNA• Programmazione ad oggettipackage Qualche::Cosa;use base Class::Accessor;#costruttore (new) #attributiNon serve, lo ha già creato Qualche::Cosa->mk_accessors(qw(nome ...));Class::Accessor;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  92. 92. PIT 2012: Workshop@UniNA• Programmazione ad oggettipackage Qualche::Cosa;use base Class::Accessor;#costruttore (new) #attributiNon serve, lo ha già creato Qualche::Cosa->mk_accessors(qw(nome ...));Class::Accessor;Scrivere meno codice permette di compiere meno errori e di rendere efficientela lettura e manutenibilità.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  93. 93. PIT 2012: Workshop@UniNA• Programmazione ad oggettipackage Qualche::Cosa;use base Class::Accessor;#costruttore (new) #attributiNon serve, lo ha già creato Qualche::Cosa->mk_accessors(qw(nome ...));Class::Accessor;Scrivere meno codice permette di compiere meno errori e di rendere efficientela lettura e manutenibilità.Ancora non abbiamo un sistema di coerenza dei valori degli attributi a meno diProgrammarlo. Vediamo se cè di meglio...Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  94. 94. PIT 2012: Workshop@UniNA• Programmazione ad oggettiLa via della Forza: MooseÈ un modulo che implementa OOP e semplifica la creazione/gestione di oggettiPer creare un oggetto sarà sufficiente:package ilMioOggetto;use Moose;...e basta! Moose crea il costruttore new() così come Class::Accessor ma...Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  95. 95. PIT 2012: Workshop@UniNA• Programmazione ad oggettiLa via della Forza: MoosePossiamo definire gli attributi specificandone il tipo.Es.package Qualche::Cosa;use Moose;has nome => ( is => rw, isa => Str)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  96. 96. PIT 2012: Workshop@UniNA• Programmazione ad oggettiLa via della Forza: MooseE tanto altro ancora come la possibilità di estendere la superclasse,definire ruoli e tanto altro ancora.Moose ”base” è dotato di numerosissime classi che ne estendono ulteriormentele già notevoli capacità.v.http://search.cpan.org/~doy/Moose-2.0602/lib/Moose/Manual.podIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  97. 97. PIT 2012: Workshop@UniNA • Programmazione ad oggettiEsempi: istanziare un oggetto da scriptuse ANM::Info;my $numero_palina=2501;my $palina=ANM::Info->new({number => $numero_palina});say ”$palina->get_info”;#---------------------------------------------------------------------------------use Crypt::FNA;my $krypto=Crypt::FNA->new();$krypto->encrypt_file(presentazione.pdf,presentazione.fna);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  98. 98. PIT 2012: Workshop@UniNA• Databaseuse DBI; # DataBase InterfaceIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  99. 99. PIT 2012: Workshop@UniNA• Databaseuse DBI; # DataBase Interfaceespone uninterfaccia ad oggetti# istruisce su tipo database, nome ed hostmy $dsn="DBI:mysql:database=$dbname;host=$host";# effettua la connessionemy $dbh=DBI->connect($dsn,$user,$pass) or die ( "Couldnt connect to database: ".DBI->errstr );$dbh->{AutoCommit} = 0Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  100. 100. PIT 2012: Workshop@UniNA• Databaseuse DBI; # DataBase InterfacePreparazione ed esecuzione di una query SQLmy $sth = $dbh->prepare(qq{ SELECT product_id FROM jos_vm_product WHERE product_sku=?}) or die $dbh->errstr;$sth->execute($codice);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  101. 101. PIT 2012: Workshop@UniNA• Databaseuse DBI; # DataBase InterfaceLettura dei risultati della querywhile (my $row=$sth->fetchrow_hashref()) { say ”$row{fieldName}”}Il metodo fetchrow_hashref restituisce la tabella con i risultati in un hashCi sono poi molti altri metodi selectrow_array, selectrow_arrayref,selectall_hashref, selectcol_arrayref, ecc.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  102. 102. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rocketsIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  103. 103. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rocketsCosa è? E larchivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoriaIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  104. 104. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rocketsCosa è? E larchivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoriaPerchè? Reinventare la ruota non è ”perlish”, mentre lo è costruire implementando altre classi così da realizzare soluzioni anche complesse con una curva di sviluppo rapida senza perdere in qualità :)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  105. 105. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rocketsCosa è? E larchivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoriaPerchè? Reinventare la ruota non è ”perlish”, mentre lo è costruire implementando altre classi così da realizzare soluzioni anche complesse con una curva di sviluppo rapida senza perdere in qualità :)Come? La qualità è una condizione necessaria: perchè una classe sia pubblicata su CPAN occorre scrivere ”strict”; fornire puntuale documentazione a corredo; superare i test dei CPAN Testers...Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  106. 106. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN Testers → Mettono a disposizione delle macchine, sui più disparati OS e mediante procedure automatiche verificano lesecuzione della classe, riportando errori, warnings, difetti nella documentazione, segnalandoli allautoreURL: metacpan.org cpantesters.orgIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  107. 107. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCPAN TestersForniscono allautore e allosviluppatore che usa una classelindicazione di eventualiproblemi, con particolareriferimento allOS usato, allaversione di Perl utilizzata, allaversione della classe.Tutti i dati sono pubblici.Chiunque può partecipare alprogetto e diventare CPANTester.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  108. 108. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  109. 109. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  110. 110. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Le risolve cpan automaticamente, grazie alle informazioni che sono reseobbligatorie agli autori da CPAN.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  111. 111. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Le risolve cpan automaticamente, grazie alle informazioni che sono reseobbligatorie agli autori da CPAN.E se il mio script lavora in remoto e non posso accedere alla shell?Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  112. 112. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Le risolve cpan automaticamente, grazie alle informazioni che sono reseobbligatorie agli autori da CPAN.E se il mio script lavora in remoto e non posso accedere alla shell?Ci sono diverse soluzioni. Una è quella di caricare in remoto le classi da cuidipende la nostra, istruendo il nostro script del percorso in cui trovarle.Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  113. 113. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Le risolve cpan automaticamente, grazie alle informazioni che sono reseobbligatorie agli autori da CPAN.E se il mio script lavora in remoto e non posso accedere alla shell?Ci sono diverse soluzioni. Una è quella di caricare in remoto le classi da cuidipende la nostra, istruendo il nostro script del percorso in cui trovarle.use lib qq($ENV{DOCUMENT_ROOT}/lib);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  114. 114. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoCome installo un modulo sul mio computer?$ cpan -i Crypt::FNAE se ci sono dipendenze da altre classi?Le risolve cpan automaticamente, grazie alle informazioni che sono reseobbligatorie agli autori da CPAN.E se il mio script lavora in remoto e non posso accedere alla shell?Ci sono diverse soluzioni. Una è quella di caricare in remoto le classi da cuidipende la nostra, istruendo il nostro script del percorso in cui trovarle.use lib qq($ENV{DOCUMENT_ROOT}/lib);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  115. 115. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  116. 116. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Parsing XML use strict; use warnings; use XML::Simple; use Data::Dumper; my $config_filename = config.xml; my $config = XMLin($config_filename); print Dumper($config); # il risultato sarà in un hashIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  117. 117. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Parsing URI use strict; use warnings; use feature say; use URI; my $uri = URI->new(http://www.nalug.net/index.php); say ”Protocollo: ” . $uri->scheme; # http say ”Host: ” . $uri->host; # www.nalug.net say ”Path: ” . $uri->path; # /index.phpIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  118. 118. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Parsing directory in modo ricorsivo use strict; use warnings; use feature say; use File::Find; my $top_directory=. find(&wanted, $top_directory); sub wanted () { say $File::Find::name; # variabile package, contiene il nome della dir parsata in quel ciclo }Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  119. 119. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Parsing directory in modo ricorsivo use Modern::Perl; use File::Find; find({wanted=> sub{say $File::Find::name}},.); In modo più compatto, con lausilio di una sub anonimaIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  120. 120. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Upload e download su FTP use strict; use warnings; use Net::FTP; $ftp = Net::FTP->new($host, Debug => 0 , Passive => 0) or die "errore $@"; $ftp->login($user,$password) or die "Non riesce il login ", $ftp->message; $ftp->put($filename) or die "upload fallito ", $ftp->message; $ftp->get($filename) or die "download fallito ", $ftp->message; $ftp->quit;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  121. 121. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Invio e ricezione email use Modern::Perl; use Net::SMTP; $smtp = Net::SMTP->new($host,Timeout => 60); $smtp->auth($user,$password); $smtp->mail($sender); $smtp->to($receiver); $smtp->data(); $smtp->datasend("To: postmastern"); $smtp->datasend("n"); $smtp->datasend("A simple test messagen"); $smtp->dataend(); $smtp->quit;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  122. 122. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Invio e ricezione email use Modern::Perl; use Net::POP3; # cè anche Net::IMAP $pop = Net::POP3->new(pop3host, Timeout => 60); if ($pop->login($username, $password) > 0) { my $msgnums = $pop->list; # hashref di msgnum => dimensione foreach my $msgnum (keys %$msgnums) { my $msg = $pop->get($msgnum); print @$msg; $pop->delete($msgnum); } } $pop->quit;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  123. 123. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Comunicare con un webserver use Modern::Perl; use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->timeout(10); # lettura my $response = $ua->get(http://www.nalug.net/); if ($response->is_success) { print $response->decoded_content; # or whatever } else { die $response->status_line }Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  124. 124. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Comunicare con un webserver use Modern::Perl; use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->timeout(10); # lettura del risultato inviando parametri in post my res=$ua->post( SERVER_ANM, Content => { __VIEWSTATE => VIEWSTATE_VALUE, __EVENTVALIDATION => EVENTVALIDATION_VALUE, TxTNumeroPalina => $self->number, BtnInviaDati => Invia Dati } );Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  125. 125. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Gestire PDF: dato un modello di documento PDF, potrete scrivervi dentro use Modern::Perl; use PDF::Reuse; prFile(myFile.pdf); prText(100, 500, Hello World !); prEnd();Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  126. 126. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Leggere e scrivere file XLS # come database → DBD::Excel e quindi il modulo DBIIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  127. 127. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Leggere e scrivere file XLS use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse(Book1.xls); for my $worksheet ( $workbook->worksheets() ) { my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); next unless $cell; say "Row, Col, Value = ($row, $col) $cell->value()"; } } }Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  128. 128. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Leggere e scrivere file XLS use Spreadsheet::WriteExcel; my $workbook = Spreadsheet::WriteExcel->new(nalug.xls); # Add a worksheet $worksheet = $workbook->add_worksheet(); # Add and define a format $format = $workbook->add_format(); $format->set_bold(); $worksheet->write($row, $col, W il NaLUG, $format); $worksheet->write(1, $col, W il PIT2012); $worksheet->write(A3, 1.2345); $worksheet->write(A4, =SIN(PI()/4));Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  129. 129. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Scrivere file SWF use SWF::Builder; use SWF::Builder::Character::Bitmap; # per inserire immagini #use SWF::Builder::Character::Text; # per inserire testo my $mc = SWF::Builder->new ( FrameRate => 1, BackgroundColor => ffffff ); my $jpeg = $mc->new_jpeg($catalog_path./data/p.$mycounter._big.jpg); $mc->FrameSize(0,0,$framewidth,$frameheight); $jpeg->place; $mc->save($catalog_path./data/p.$mycounter..swf);Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  130. 130. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Editare immagini use GD::Simple; use Image::Resize; $img = GD::Simple->new(400,250); $img->bgcolor(red); $img->fgcolor(blue); $img->rectangle(10,10,50,50); $img->fgcolor(orange); $img->ellipse(40,40); print $img->png; # previa open del file contenitore dellimmagine $img = Image::Resize->new(large.jpg); print $image->resize(250, 250); # previa open del file contenitore dellimmagineIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  131. 131. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Produrre una GUI (http://www.wxwidgets.org) use Wx; # interfaccia verso wxwidgets my $app = Wx::SimpleApp->new(); # il nostro gestore eventi my $frame = Wx::Frame->new( undef, -1, Hello, world! ); # un pulsante e relativo gestore eventi my $hello_button=Wx::Button->new($frame,-1,Ciao NaLUG); EVT_BUTTON( $frame,$hello_button, sub { Wx::MessageBox(”Quanto è bello il PIT”),”Ciao”,wxOK) } );Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  132. 132. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Elaborazione in multithreading use threads; use threads::shared; # per definire variabili condivise tra i threads my $var :shared: for (@files_to_encrypt) { push @thr,threads->new(sub { my $krypto=shift; my $file_to_encrypt=shift; my $file_encrypted=$file_to_encrypt.".fna"; $krypto->encrypt_file($file_to_encrypt,$file_encrypted); threads->yield(): # passa ad altro thread appena possibile (decide OS) }, $krypto, $_ ); } for (@thr) {$_->join()}Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  133. 133. PIT 2012: Workshop@UniNA• CPAN e moduli di rilievo Adesso creiamo un razzo spaziale: server di streaming use AnyEvent; use RTSP::Server; # istanza del server # inizia ascolto my $srv = new RTSP::Server( $srv->listen; max_clients => 100, client_listen_port => 554, e a questo punto il gestore per i vari eventi... source_listen_port => 5545, rtp_start_port => 20000, my $cv = AnyEvent->condvar; client_listen_address => 0.0.0.0, # ... source_listen_address => 0.0.0.0 # ... ); # ... $cv->recv;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  134. 134. PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  135. 135. PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggioIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  136. 136. PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggio • è un modo di programmare usando le funzioni fornite dalle ultime versioniIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  137. 137. PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggio • è un modo di programmare usando le funzioni fornite dalle ultime versioni • è un modulo (che attiva le nuove features e sempre strict e warnings)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  138. 138. PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggio • è un modo di programmare usando le funzioni fornite dalle ultime versioni • è un modulo (che attiva le nuove features e sempre strict e warnings) Lintroduzione a Modern::Perl dovrete farla voi inserendolo nei vostri script ed iniziando a programmareIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  139. 139. PIT 2012: Workshop@UniNA• Modern::Perl Altro? Ci sono le API per programmare in Perl su AndroidIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  140. 140. PIT 2012: Workshop@UniNA• Modern::Perl Altro? Ci sono le API per programmare in Perl su Android use Android; my $d = Android->new; for (1..10) { my $loc = $d->getLastKnownLocation; print "Long: $loc->{result}{longitude} Lat: $loc->{result}{latitude}n"; sleep 1 } Mostrerà le nostre coordinate durante una passeggiata!!!Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  141. 141. PIT 2012: Workshop@UniNA• Modern::Perl Altro? Ci sono le API per programmare applicazioni su Facebook use Modern::Perl; use CGI::Simple; use WWW::Facebook::API; my $q = CGI::Simple->new(); my $fb = WWW::Facebook::API->new( desktop => 0, api_key => your_api_key, secret => your_secret_key, query => $q, ); my $friends_info = $fb->users->get_info( uids => $user_friends, fields => [qw/ name /], );Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  142. 142. PIT 2012: Workshop@UniNA• Modern::Perl Altro? Ci sono le API per programmare applicazioni su Facebook http://www.facebook.com/developers/ use Modern::Perl; Qui troverete le API keys ed altri dati. use CGI::Simple; use WWW::Facebook::API; my $q = CGI::Simple->new(); my $fb = WWW::Facebook::API->new( desktop => 0, api_key => your_api_key, secret => your_secret_key, query => $q, ); my $friends_info = $fb->users->get_info( uids => $user_friends, fields => [qw/ name /], );Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  143. 143. PIT 2012: Workshop@UniNA IPW, Italian Perl Workshop dal 10 al 12 ottobre 2012 CNR di Bologna. usa Perl responsabilmente Link utili use strict; use warnings; Il punto di riferimento di Perl in Italia www.perl.it Associazione Perl.it www.perl.it/associazione Il linguaggio di programmazione Perl www.perl.org Distribuzioni e IDE Strawberryperl, Perl per MS Windows strawberryperl.com ActivePerl www.activestate.com/activeperl Padre, Perl IDE padre.perlide.org Moduli e Classi Comprehensive Perl Archive Network metacpan.org Mailing list, IRC mongers@lists.perl.it lists.perl.it/sympa/info/mongers Perlweekly perlweekly.com Irc.freenode.net #perl.it Scoprite il linguaggio che rende facili le cose facili e possibili quelle difficili 128Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  144. 144. PIT 2012: Workshop@UniNA• Bibliografia Documentazione su www.perl.it Documentazione su www.cpan.org Modern::Perl by Chromatic http://www.onyxneon.com/books/modern_perl/index.html (free book) ”Pocket Perl” di Stefano Rodighiero (Larsen), ed. Apogeo ”Corso di Perl” di Stefano Rodighiero su Slideshare Documentazione sul blog http://szabgab.com www.cattlegrid.info/blog/2009/11/writing-facebook-applications-in-perl.html (prima parte di Michele Beltrame)Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
  145. 145. PIT 2012: Workshop@UniNAThe End!Ringrazio il NaLUG,gli amici della community Perl italiana da cui ho sempre da imparare,lUniversità Federico II di Napoli, Facoltà di Ingegneriae soprattutto voi che con pazienza e curiosità avete fatto questo piccoloed intenso percorso.Grazie :) Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org

×