• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
 

Pit2012 modern perl

on

  • 558 views

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à ...

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à

Statistics

Views

Total Views
558
Views on SlideShare
558
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Pit2012 modern perl Pit2012 modern perl Presentation Transcript

    • 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
    • PIT 2012: Workshop@UniNA• Il linguaggio PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili specialiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • PIT 2012: Workshop@UniNA• Il linguaggio Perl• Struttura dei dati (variabili) • Variabili speciali• SintassiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Il linguaggio PerlIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report LanguageIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • PIT 2012: Workshop@UniNA• Il linguaggio Perl PERL → Pratical Extraction and Report LanguageIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Il linguaggio PerlPer avere un aiuto:Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Struttura dei datiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Struttura dei dati: esempiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Programmazione ad oggettiUsiamo elementi già noti del linguaggio:Oggetti → RiferimentiIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Databaseuse DBI; # DataBase InterfaceIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• CPAN e moduli di rilievoIntroduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • PIT 2012: Workshop@UniNA• Modern::Perl use Modern::Perl;Introduzione a Modern::Perldi Mario Rossano aka Anak – anak@cpan.org
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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