SlideShare a Scribd company logo
1 of 145
Download to read offline
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
- a cura di Mario Rossano aka Anak -
con il patrocinio del Preside della Facoltà di Ingegneria
dell'Università degli Studi di Napoli Federico II:
Prof. Piero Salatino
e con il sostegno del Prof. Antonio Pescapè
Comics Unina Research Group
Facoltà di Ingegneria, Univ. Federico II di Napoli, 14/05/2012
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Il linguaggio Perl
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Il linguaggio Perl
• Struttura dei dati (variabili)
• Variabili speciali
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Il linguaggio Perl
• Struttura dei dati (variabili)
• Variabili speciali
• Sintassi
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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::Perl
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PERL → Polomorphic Existential Recursive Lambdas
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PERL → Polomorphic Existential Recursive Lambdas
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PERL → Polomorphic Existential Recursive Lambdas
PERL
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PERL → Polomorphic Existential Recursive Lambdas
PERL
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
PERL → Pratical Extraction and Report Language
PERL → Pathologically Eclectic Rubbish Lister
PERL → Polomorphic Existential Recursive Lambdas
PERL
Perl
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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 acronimo
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Come ha detto Larry Wall (creatore del Perl):
”There is More Than One Way To Do It”
”C'è più di un modo per farlo”
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Come 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.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Come 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::*
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Come 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.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Sui sistemi *NIX è quasi certamente già installato (99.99%), diversamente:
apt-get install perl
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Sui sistemi *NIX è quasi certamente già installato (99.99%), diversamente:
apt-get install perl
Su Windows sono disponibili:
Activestate Perl → http://www.activestate.com/activeperl
Strawberry Perl → http://strawberryperl.com/
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Per avere un aiuto:
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Per avere un aiuto:
perldoc ($ apt-get install perl-doc)
mongers@perl.it (mailing list)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Per avere un aiuto:
perldoc ($ apt-get install perl-doc)
mongers@perl.it (mailing list)
#perl.it (irc su freenode.net)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Il linguaggio Perl
Per avere un aiuto:
perldoc ($ apt-get install perl-doc)
mongers@perl.it (mailing list)
#perl.it (irc su freenode.net)
www.perlmonks.org
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Sintassi
Perl ha una sintassi derivata dal linguaggio C
I blocchi sono delimitati da parentesi graffe {
Il delimitatore di fine istruzione è il punto e virgola ;
Perl ha una sintassi derivata dal linguaggio C
BLOCK {
… ;
… ;
...
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci sono tre SYGIL e riflettono la struttura della variabile:
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci sono tre SYGIL e riflettono la struttura della variabile:
$ → scalare
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci sono tre SYGIL e riflettono la struttura della variabile:
$ → scalare
@ → array
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci sono tre SYGIL e riflettono la struttura della variabile:
$ → scalare
@ → array
% → hash
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci sono tre SYGIL e riflettono la struttura della variabile:
$ → scalare → può contenere un singolo valore di qualunque tipo (stringa, nun, ...)
@ → array
% → hash
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati
In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
Ci 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 hash
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
$scalare=7;
$scalare='NaLUG';
$scalare='7';
$scalare=1.32e-10;
$scalare=0xdeadbeaf;
$scalare=0b0001010;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
$scalare=7;
$scalare='NaLUG';
$scalare='7';
$scalare=1.32e-10;
$scalare=0xdeadbeaf;
$scalare=0b0001010;
@array=(7,'NaLUG','7',1.32e-10,0xdeadbeaf,0b0001010);
@array = ( [1, 2, 3],
[4, 5, 6],
[7, 8, 9]
);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
$scalare=7;
$scalare='NaLUG';
$scalare='7';
$scalare=1.32e-10;
$scalare=0xdeadbeaf;
$scalare=0b0001010;
@array=(7,'NaLUG','7',1.32e-10,0xdeadbeaf,0b0001010);
$array[0] → 7; $array[1] → 'Nalug';...
@array = ( [1, 2, 3],
[4, 5, 6],
[7, 8, 9]
);
$array[0][0] → 1; $array[1][2] → 6;
%hash={...}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
my $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']
},
],
);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: esempi
my $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']
},
],
);
say $hash{'chiave1'};
stringa
say $hash{'chiave3'}[1];
1
say $hash{'chiave4'}[2];
testo
say $hash{'chiave5'}[0]{flintstones};
Fred
say $hash{'chiave5'}[0]{goldrake}[1];
Alcor
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: funzioni su array ed hash
pop ARRAY → rimuove e restituisce l'ultimo valore dell'array
push ARRAY,LISTA → aggiunge alla fine di array i valori di lista
shift ARRAY → rimuove e restituisce il primo elemento di array
splice 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, l'operazione è fatta a partire dalla fine dell'array
join ESPR,LISTA → trasforma una lista o un array in una stringa, con gli elementi
separati da ”espr”
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Struttura dei dati: funzioni su array ed hash
sort LISTA → effettua un ordinamento dei dati
sort{$a cmp $b} @file # lessicale
sort{$a <=> $b} @file # numerico
reverse LISTA → capovolge una lista
keys HASH → restituisce un array contenente le chiavi dell'hash
values HASH → restituisce un array contenente i valori dell'hash
my %settimana=(
'Lun' => 'Mon',
'Mar' => 'Tue',
'Mer' => 'Wed',
'Gio' => 'Thu',
'Ven' => 'Fri',
'Sab' => 'Sat',
'Dom' => 'Sun'
)
Es.
foreach $chiave(keys(%settimana)) {
say ”$settimana{$chiave}”
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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 sull'errore di esecuzione
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
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à → not
• Sintassi: gli operatori logici e comparativi
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 → 1
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Sintassi: altri operatori, numerici e funzioni
Operatori numerici
Addizione +
Sottrazione -
Moltiplicazione *
El. a potenza **
Funzioni matematiche (altre su mod. Math::Trig;)
Valore assoluto abs
Arcotangente atan2
Coseno cos
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.)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Sintassi: altri operatori, numerici e funzioni
Operatori stringa
Concatenazione .
Funzioni su stringhe (principali)
chomp ($s)→ rimuove il newline in coda
chop ($s) → rimuove l'ultimo carattere
chr ($n) → restituisce il carattere nell'insieme
length ($s) → lunghezza della stringa
reverse ($s) → inverte la stringa
substr ($s,start,end) → estrae una sottostringa
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Le istruzioni condizionali
If LOGICAL {
BLOCK
} elsif LOGICAL {
BLOCK
} else {
BLOCK
}
switch LOGICAL
case BLOCK
case …
else ...
If LOGICAL ? BLOCK : BLOCK
BLOCK if LOGICAL
given ($scalar) {
when (/apples/) { BLOCK}
when …
default { BLOCK}
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Gli iteratori
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)
”c'è più di un modo per farlo”
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 volta
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Controllo 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
last
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Controllo 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
last
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Controllo 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
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
Controllo 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';
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Input/Output SU FILE
Lettura di un file:
while (!eof($fileHandle)) {
my $riga=<$fileHandle>;
…
...
}
Scrittura in un file:
print $fileHandle $qualchecosa.”n”
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Le espressioni regolari (REGEXP)
L'arma letale di Perl è un linguaggio nel linguaggio.
A cosa servono le espressioni regolari:
. verificare la presenza di una stringa in un'altra
. sostituire in un testo una parte di stringa con altra stringa
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 → globale
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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ù l'underscore (_)
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)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
 # backslash
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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-+.]+)$/
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 &
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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(...);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I package sono collezioni di subroutine.
Mentre le subroutine permettono di organizzare blocchi di codice, i package
Spingono questa granularità ad un livello più alto.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
foreach my $element(@array) {
BLOCK
}
{
package nalug;
my $variabileInterna=...;
Sub nameSubroutine BLOCK
}
my $result=nalug::nameSubroutine();
my $variabileEsterna=$nalug::variabileInterna;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I moduli contengono package.
Mentre le subroutine permettono di organizzare blocchi di codice ed i package
spingono questa granularità ad un livello più alto, i moduli contengono package
e costituiscono files esterni al nostro script.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I moduli contengono package.
Mentre le subroutine permettono di organizzare blocchi di codice ed i package
spingono questa granularità ad un livello più alto, i moduli contengono package
e costituiscono files esterni al nostro script.
Istruzione ”use” seguita dal nome qualificato del modulo
use Crypt::FNA;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I moduli pragmatici – usa Perl responsabilmente!
use strict;
use warnings;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I moduli pragmatici – usa Perl responsabilmente!
use strict;
use warnings;
strict → attiva controlli sullo scope delle variabili e la loro definizione.
Obbliga, ad es. all'uso di ”my”
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Package e Moduli
I moduli pragmatici – usa Perl responsabilmente!
use strict;
use warnings;
strict → attiva controlli sullo scope delle variabili e la loro definizione.
Obbliga, ad es. all'uso di ”my”
warnings → indica errori non fatali ma che è bene controllare
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Usiamo elementi già noti del linguaggio:
Oggetti → Riferimenti
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Usiamo elementi già noti del linguaggio:
Oggetti → Riferimenti
Classi → Package
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Usiamo elementi già noti del linguaggio:
Oggetti → Riferimenti
Classi → Package
Metodi → Subroutine
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Usiamo elementi già noti del linguaggio:
Oggetti → Riferimenti
Classi → Package
Metodi → Subroutine
D. Come creo un oggetto?
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Usiamo elementi già noti del linguaggio:
Oggetti → Riferimenti
Classi → Package
Metodi → Subroutine
D. Come creo un oggetto?
R. Lo battezzo come tale.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
sub new {
my $class = shift;
my $init = shift;
my $self={};
bless $self,$class;
$self->nome($init->{number})
return $self
}
#costruttore
package Qualche::Cosa;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
sub new {
my $class = shift;
my $init = shift;
my $self={};
bless $self,$class;
$self->nome($init->{number})
return $self
}
sub nome {
my $self=shift;
if (@_) {
$self->{nome}=shift
}
return $self->{nome}
}
Package Figlio;
use base Qualche::Cosa;
#costruttore #attributi
package Qualche::Cosa;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Non serve, lo ha già creato
Class::Accessor;
Qualche::Cosa->mk_accessors(qw(nome ...));
#costruttore (new) #attributi
package Qualche::Cosa;
use base Class::Accessor;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Non serve, lo ha già creato
Class::Accessor;
Qualche::Cosa->mk_accessors(qw(nome ...));
#costruttore (new) #attributi
package Qualche::Cosa;
use base Class::Accessor;
Scrivere meno codice permette di compiere meno errori e di rendere efficiente
la lettura e manutenibilità.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Non serve, lo ha già creato
Class::Accessor;
Qualche::Cosa->mk_accessors(qw(nome ...));
#costruttore (new) #attributi
package Qualche::Cosa;
use base Class::Accessor;
Scrivere meno codice permette di compiere meno errori e di rendere efficiente
la lettura e manutenibilità.
Ancora non abbiamo un sistema di coerenza dei valori degli attributi a meno di
Programmarlo. Vediamo se c'è di meglio...
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
La via della Forza: Moose
È un modulo che implementa OOP e semplifica la creazione/gestione di oggetti
Per creare un oggetto sarà sufficiente:
package ilMioOggetto;
use Moose;
...e basta! Moose crea il costruttore new() così come Class::Accessor ma...
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
La via della Forza: Moose
Possiamo definire gli attributi specificandone il tipo.
Es.
package Qualche::Cosa;
use Moose;
has 'nome' => (
is => 'rw',
isa => 'Str'
)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
La via della Forza: Moose
E 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 ulteriormente
le già notevoli capacità.
v.
http://search.cpan.org/~doy/Moose-2.0602/lib/Moose/Manual.pod
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Programmazione ad oggetti
Esempi: istanziare un oggetto da script
use 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');
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Database
use DBI; # DataBase Interface
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Database
use DBI; # DataBase Interface
espone un'interfaccia ad oggetti
# istruisce su tipo database, nome ed host
my $dsn="DBI:mysql:database=$dbname;host=$host";
# effettua la connessione
my $dbh=DBI->connect($dsn,$user,$pass) or die (
"Couldn't connect to database: ".DBI->errstr
);
$dbh->{AutoCommit} = 0
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Database
use DBI; # DataBase Interface
Preparazione ed esecuzione di una query SQL
my $sth = $dbh->prepare(qq{
SELECT product_id
FROM jos_vm_product
WHERE product_sku=?}
) or die $dbh->errstr;
$sth->execute($codice);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Database
use DBI; # DataBase Interface
Lettura dei risultati della query
while (my $row=$sth->fetchrow_hashref()) {
say ”$row{fieldName}”
}
Il metodo fetchrow_hashref restituisce la tabella con i risultati in un hash
Ci sono poi molti altri metodi selectrow_array, selectrow_arrayref,
selectall_hashref, selectcol_arrayref, ecc.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN → Comprehensive Perl Archive Network
Stop reinventing wheels, start building space rockets
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN → Comprehensive Perl Archive Network
Stop reinventing wheels, start building space rockets
Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni
esigenza, suddivise per categoria
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN → Comprehensive Perl Archive Network
Stop reinventing wheels, start building space rockets
Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni
esigenza, suddivise per categoria
Perchè? 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à :)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN → Comprehensive Perl Archive Network
Stop reinventing wheels, start building space rockets
Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni
esigenza, suddivise per categoria
Perchè? 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...
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN Testers → Mettono a disposizione delle macchine, sui più disparati OS
e mediante procedure automatiche verificano l'esecuzione
della classe, riportando errori, warnings, difetti nella
documentazione, segnalandoli all'autore
URL: metacpan.org
cpantesters.org
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
CPAN Testers
Forniscono all'autore e allo
sviluppatore che usa una classe
l'indicazione di eventuali
problemi, con particolare
riferimento all'OS usato, alla
versione di Perl utilizzata, alla
versione della classe.
Tutti i dati sono pubblici.
Chiunque può partecipare al
progetto e diventare CPAN
Tester.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
Le risolve cpan automaticamente, grazie alle informazioni che sono rese
obbligatorie agli autori da CPAN.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
Le risolve cpan automaticamente, grazie alle informazioni che sono rese
obbligatorie agli autori da CPAN.
E se il mio script lavora in remoto e non posso accedere alla shell?
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
Le risolve cpan automaticamente, grazie alle informazioni che sono rese
obbligatorie 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 cui
dipende la nostra, istruendo il nostro script del percorso in cui trovarle.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
Le risolve cpan automaticamente, grazie alle informazioni che sono rese
obbligatorie 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 cui
dipende la nostra, istruendo il nostro script del percorso in cui trovarle.
use lib qq($ENV{DOCUMENT_ROOT}/lib);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• CPAN e moduli di rilievo
Come installo un modulo sul mio computer?
$ cpan -i Crypt::FNA
E se ci sono dipendenze da altre classi?
Le risolve cpan automaticamente, grazie alle informazioni che sono rese
obbligatorie 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 cui
dipende la nostra, istruendo il nostro script del percorso in cui trovarle.
use lib qq($ENV{DOCUMENT_ROOT}/lib);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
CPAN e moduli di rilievo
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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 hash
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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.php
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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 l'ausilio di una sub anonima
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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'
}
);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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();
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
CPAN e moduli di rilievo
Leggere e scrivere file XLS
# come database → DBD::Excel e quindi il modulo DBI
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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()";
}
}
}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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)');
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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');
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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 dell'immagine
$img = Image::Resize->new('large.jpg');
print $image->resize(250, 250); # previa open del file contenitore dell'immagine
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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)
}
);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
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()}
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
•
CPAN e moduli di rilievo
Adesso creiamo un razzo spaziale: server di streaming
use AnyEvent;
use RTSP::Server;
# istanza del server
my $srv = new RTSP::Server(
max_clients => 100,
client_listen_port => 554,
source_listen_port => 5545,
rtp_start_port => 20000,
client_listen_address => '0.0.0.0',
source_listen_address => '0.0.0.0'
);
# inizia ascolto
$srv->listen;
e a questo punto il gestore per i vari eventi...
my $cv = AnyEvent->condvar;
# ...
# ...
# ...
$cv->recv;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Modern::Perl
use Modern::Perl;
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Modern::Perl
use Modern::Perl;
• è sempre Perl e non un altro linguaggio
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Modern::Perl
use Modern::Perl;
• è sempre Perl e non un altro linguaggio
• è un modo di programmare usando le funzioni fornite dalle ultime versioni
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
L'introduzione a Modern::Perl dovrete farla voi
inserendolo nei vostri script ed iniziando a programmare
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• Modern::Perl
Altro?
Ci sono le API per programmare in Perl su Android
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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!!!
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 /],
);
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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 /],
);
http://www.facebook.com/developers/
Qui troverete le API keys ed altri dati.
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
128
Il punto di riferimento di Perl in Italia
Associazione Perl.it
Il linguaggio di programmazione Perl
www.perl.it
www.perl.it/associazione
www.perl.org
Link utili
Distribuzioni e IDE
Strawberryperl, Perl per MS Windows
ActivePerl
Padre, Perl IDE
strawberryperl.com
www.activestate.com/activeperl
padre.perlide.org
Comprehensive Perl Archive Network
Moduli e Classi
metacpan.org
mongers@lists.perl.it
Perlweekly
Irc.freenode.net
Mailing list, IRC
usa Perl responsabilmente
use strict;
use warnings;
IPW, Italian Perl Workshop dal 10 al 12 ottobre 2012 CNR di Bologna.
Scoprite il linguaggio che rende facili le cose facili e possibili quelle difficili
lists.perl.it/sympa/info/mongers
perlweekly.com
#perl.it
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
• 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)
PIT 2012: Workshop@UniNA
Introduzione a Modern::Perl
di Mario Rossano aka Anak – anak@cpan.org
The End!
Ringrazio il NaLUG,
gli amici della community Perl italiana da cui ho sempre da imparare,
l'Università Federico II di Napoli, Facoltà di Ingegneria
e soprattutto voi che con pazienza e curiosità avete fatto questo piccolo
ed intenso percorso.
Grazie :)

More Related Content

Recently uploaded

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.giuliofiorerm
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxMartin M Flynn
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaCON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaRafael Figueredo
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 

Recently uploaded (9)

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptx
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla CresimaCON OCCHI DIVERSI - catechesi per candidati alla Cresima
CON OCCHI DIVERSI - catechesi per candidati alla Cresima
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Pit2012 modern perl

  • 1. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl - a cura di Mario Rossano aka Anak - con il patrocinio del Preside della Facoltà di Ingegneria dell'Università degli Studi di Napoli Federico II: Prof. Piero Salatino e con il sostegno del Prof. Antonio Pescapè Comics Unina Research Group Facoltà di Ingegneria, Univ. Federico II di Napoli, 14/05/2012
  • 2. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl
  • 3. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl • Struttura dei dati (variabili) • Variabili speciali
  • 4. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl • Struttura dei dati (variabili) • Variabili speciali • Sintassi
  • 5. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 6. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 7. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 8. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 9. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 10. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 11. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 12. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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
  • 13. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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::Perl
  • 14. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl
  • 15. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language
  • 16. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language
  • 17. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister
  • 18. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister
  • 19. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas
  • 20. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas
  • 21. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERL
  • 22. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERL
  • 23. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl PERL → Pratical Extraction and Report Language PERL → Pathologically Eclectic Rubbish Lister PERL → Polomorphic Existential Recursive Lambdas PERL Perl
  • 24. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 acronimo
  • 25. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Come ha detto Larry Wall (creatore del Perl): ”There is More Than One Way To Do It” ”C'è più di un modo per farlo”
  • 26. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Come 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.
  • 27. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Come 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::*
  • 28. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Come 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.
  • 29. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Sui sistemi *NIX è quasi certamente già installato (99.99%), diversamente: apt-get install perl
  • 30. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Sui sistemi *NIX è quasi certamente già installato (99.99%), diversamente: apt-get install perl Su Windows sono disponibili: Activestate Perl → http://www.activestate.com/activeperl Strawberry Perl → http://strawberryperl.com/
  • 31. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Per avere un aiuto:
  • 32. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Per avere un aiuto: perldoc ($ apt-get install perl-doc) mongers@perl.it (mailing list)
  • 33. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Per avere un aiuto: perldoc ($ apt-get install perl-doc) mongers@perl.it (mailing list) #perl.it (irc su freenode.net)
  • 34. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Il linguaggio Perl Per avere un aiuto: perldoc ($ apt-get install perl-doc) mongers@perl.it (mailing list) #perl.it (irc su freenode.net) www.perlmonks.org
  • 35. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Sintassi Perl ha una sintassi derivata dal linguaggio C I blocchi sono delimitati da parentesi graffe { Il delimitatore di fine istruzione è il punto e virgola ; Perl ha una sintassi derivata dal linguaggio C BLOCK { … ; … ; ... }
  • 36. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati
  • 37. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL
  • 38. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci sono tre SYGIL e riflettono la struttura della variabile:
  • 39. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci sono tre SYGIL e riflettono la struttura della variabile: $ → scalare
  • 40. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci sono tre SYGIL e riflettono la struttura della variabile: $ → scalare @ → array
  • 41. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci sono tre SYGIL e riflettono la struttura della variabile: $ → scalare @ → array % → hash
  • 42. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci sono tre SYGIL e riflettono la struttura della variabile: $ → scalare → può contenere un singolo valore di qualunque tipo (stringa, nun, ...) @ → array % → hash
  • 43. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci 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
  • 44. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati In Perl i nomi delle variabili sono preceduti da un carattere detto: SYGIL Ci 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 hash
  • 45. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi
  • 46. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi $scalare=7; $scalare='NaLUG'; $scalare='7'; $scalare=1.32e-10; $scalare=0xdeadbeaf; $scalare=0b0001010;
  • 47. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi $scalare=7; $scalare='NaLUG'; $scalare='7'; $scalare=1.32e-10; $scalare=0xdeadbeaf; $scalare=0b0001010; @array=(7,'NaLUG','7',1.32e-10,0xdeadbeaf,0b0001010); @array = ( [1, 2, 3], [4, 5, 6], [7, 8, 9] );
  • 48. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi $scalare=7; $scalare='NaLUG'; $scalare='7'; $scalare=1.32e-10; $scalare=0xdeadbeaf; $scalare=0b0001010; @array=(7,'NaLUG','7',1.32e-10,0xdeadbeaf,0b0001010); $array[0] → 7; $array[1] → 'Nalug';... @array = ( [1, 2, 3], [4, 5, 6], [7, 8, 9] ); $array[0][0] → 1; $array[1][2] → 6; %hash={...}
  • 49. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi my $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'] }, ], );
  • 50. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: esempi my $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'] }, ], ); say $hash{'chiave1'}; stringa say $hash{'chiave3'}[1]; 1 say $hash{'chiave4'}[2]; testo say $hash{'chiave5'}[0]{flintstones}; Fred say $hash{'chiave5'}[0]{goldrake}[1]; Alcor
  • 51. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: funzioni su array ed hash pop ARRAY → rimuove e restituisce l'ultimo valore dell'array push ARRAY,LISTA → aggiunge alla fine di array i valori di lista shift ARRAY → rimuove e restituisce il primo elemento di array splice 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, l'operazione è fatta a partire dalla fine dell'array join ESPR,LISTA → trasforma una lista o un array in una stringa, con gli elementi separati da ”espr”
  • 52. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Struttura dei dati: funzioni su array ed hash sort LISTA → effettua un ordinamento dei dati sort{$a cmp $b} @file # lessicale sort{$a <=> $b} @file # numerico reverse LISTA → capovolge una lista keys HASH → restituisce un array contenente le chiavi dell'hash values HASH → restituisce un array contenente i valori dell'hash my %settimana=( 'Lun' => 'Mon', 'Mar' => 'Tue', 'Mer' => 'Wed', 'Gio' => 'Thu', 'Ven' => 'Fri', 'Sab' => 'Sat', 'Dom' => 'Sun' ) Es. foreach $chiave(keys(%settimana)) { say ”$settimana{$chiave}” }
  • 53. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 sull'errore di esecuzione
  • 54. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org 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à → not • Sintassi: gli operatori logici e comparativi
  • 55. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 → 1
  • 56. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Sintassi: altri operatori, numerici e funzioni Operatori numerici Addizione + Sottrazione - Moltiplicazione * El. a potenza ** Funzioni matematiche (altre su mod. Math::Trig;) Valore assoluto abs Arcotangente atan2 Coseno cos 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.)
  • 57. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Sintassi: altri operatori, numerici e funzioni Operatori stringa Concatenazione . Funzioni su stringhe (principali) chomp ($s)→ rimuove il newline in coda chop ($s) → rimuove l'ultimo carattere chr ($n) → restituisce il carattere nell'insieme length ($s) → lunghezza della stringa reverse ($s) → inverte la stringa substr ($s,start,end) → estrae una sottostringa
  • 58. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Le istruzioni condizionali If LOGICAL { BLOCK } elsif LOGICAL { BLOCK } else { BLOCK } switch LOGICAL case BLOCK case … else ... If LOGICAL ? BLOCK : BLOCK BLOCK if LOGICAL given ($scalar) { when (/apples/) { BLOCK} when … default { BLOCK} }
  • 59. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Gli iteratori 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) ”c'è più di un modo per farlo”
  • 60. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 volta
  • 61. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Controllo 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 last
  • 62. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Controllo 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 last
  • 63. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Controllo 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
  • 64. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Controllo 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';
  • 65. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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;
  • 66. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Input/Output SU FILE Lettura di un file: while (!eof($fileHandle)) { my $riga=<$fileHandle>; … ... } Scrittura in un file: print $fileHandle $qualchecosa.”n”
  • 67. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Le espressioni regolari (REGEXP) L'arma letale di Perl è un linguaggio nel linguaggio. A cosa servono le espressioni regolari: . verificare la presenza di una stringa in un'altra . sostituire in un testo una parte di stringa con altra stringa
  • 68. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 → globale
  • 69. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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)
  • 70. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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)
  • 71. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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ù l'underscore (_) 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)
  • 72. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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) # backslash
  • 73. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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-+.]+)$/
  • 74. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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.
  • 75. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 &
  • 76. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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(...);
  • 77. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I package sono collezioni di subroutine. Mentre le subroutine permettono di organizzare blocchi di codice, i package Spingono questa granularità ad un livello più alto.
  • 78. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli foreach my $element(@array) { BLOCK } { package nalug; my $variabileInterna=...; Sub nameSubroutine BLOCK } my $result=nalug::nameSubroutine(); my $variabileEsterna=$nalug::variabileInterna;
  • 79. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I moduli contengono package. Mentre le subroutine permettono di organizzare blocchi di codice ed i package spingono questa granularità ad un livello più alto, i moduli contengono package e costituiscono files esterni al nostro script.
  • 80. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I moduli contengono package. Mentre le subroutine permettono di organizzare blocchi di codice ed i package spingono questa granularità ad un livello più alto, i moduli contengono package e costituiscono files esterni al nostro script. Istruzione ”use” seguita dal nome qualificato del modulo use Crypt::FNA;
  • 81. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I moduli pragmatici – usa Perl responsabilmente! use strict; use warnings;
  • 82. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I moduli pragmatici – usa Perl responsabilmente! use strict; use warnings; strict → attiva controlli sullo scope delle variabili e la loro definizione. Obbliga, ad es. all'uso di ”my”
  • 83. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Package e Moduli I moduli pragmatici – usa Perl responsabilmente! use strict; use warnings; strict → attiva controlli sullo scope delle variabili e la loro definizione. Obbliga, ad es. all'uso di ”my” warnings → indica errori non fatali ma che è bene controllare
  • 84. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Usiamo elementi già noti del linguaggio: Oggetti → Riferimenti
  • 85. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Usiamo elementi già noti del linguaggio: Oggetti → Riferimenti Classi → Package
  • 86. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Usiamo elementi già noti del linguaggio: Oggetti → Riferimenti Classi → Package Metodi → Subroutine
  • 87. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Usiamo elementi già noti del linguaggio: Oggetti → Riferimenti Classi → Package Metodi → Subroutine D. Come creo un oggetto?
  • 88. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Usiamo elementi già noti del linguaggio: Oggetti → Riferimenti Classi → Package Metodi → Subroutine D. Come creo un oggetto? R. Lo battezzo come tale.
  • 89. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti sub new { my $class = shift; my $init = shift; my $self={}; bless $self,$class; $self->nome($init->{number}) return $self } #costruttore package Qualche::Cosa;
  • 90. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti sub new { my $class = shift; my $init = shift; my $self={}; bless $self,$class; $self->nome($init->{number}) return $self } sub nome { my $self=shift; if (@_) { $self->{nome}=shift } return $self->{nome} } Package Figlio; use base Qualche::Cosa; #costruttore #attributi package Qualche::Cosa;
  • 91. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Non serve, lo ha già creato Class::Accessor; Qualche::Cosa->mk_accessors(qw(nome ...)); #costruttore (new) #attributi package Qualche::Cosa; use base Class::Accessor;
  • 92. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Non serve, lo ha già creato Class::Accessor; Qualche::Cosa->mk_accessors(qw(nome ...)); #costruttore (new) #attributi package Qualche::Cosa; use base Class::Accessor; Scrivere meno codice permette di compiere meno errori e di rendere efficiente la lettura e manutenibilità.
  • 93. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Non serve, lo ha già creato Class::Accessor; Qualche::Cosa->mk_accessors(qw(nome ...)); #costruttore (new) #attributi package Qualche::Cosa; use base Class::Accessor; Scrivere meno codice permette di compiere meno errori e di rendere efficiente la lettura e manutenibilità. Ancora non abbiamo un sistema di coerenza dei valori degli attributi a meno di Programmarlo. Vediamo se c'è di meglio...
  • 94. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti La via della Forza: Moose È un modulo che implementa OOP e semplifica la creazione/gestione di oggetti Per creare un oggetto sarà sufficiente: package ilMioOggetto; use Moose; ...e basta! Moose crea il costruttore new() così come Class::Accessor ma...
  • 95. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti La via della Forza: Moose Possiamo definire gli attributi specificandone il tipo. Es. package Qualche::Cosa; use Moose; has 'nome' => ( is => 'rw', isa => 'Str' )
  • 96. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti La via della Forza: Moose E 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 ulteriormente le già notevoli capacità. v. http://search.cpan.org/~doy/Moose-2.0602/lib/Moose/Manual.pod
  • 97. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Programmazione ad oggetti Esempi: istanziare un oggetto da script use 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');
  • 98. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Database use DBI; # DataBase Interface
  • 99. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Database use DBI; # DataBase Interface espone un'interfaccia ad oggetti # istruisce su tipo database, nome ed host my $dsn="DBI:mysql:database=$dbname;host=$host"; # effettua la connessione my $dbh=DBI->connect($dsn,$user,$pass) or die ( "Couldn't connect to database: ".DBI->errstr ); $dbh->{AutoCommit} = 0
  • 100. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Database use DBI; # DataBase Interface Preparazione ed esecuzione di una query SQL my $sth = $dbh->prepare(qq{ SELECT product_id FROM jos_vm_product WHERE product_sku=?} ) or die $dbh->errstr; $sth->execute($codice);
  • 101. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Database use DBI; # DataBase Interface Lettura dei risultati della query while (my $row=$sth->fetchrow_hashref()) { say ”$row{fieldName}” } Il metodo fetchrow_hashref restituisce la tabella con i risultati in un hash Ci sono poi molti altri metodi selectrow_array, selectrow_arrayref, selectall_hashref, selectcol_arrayref, ecc.
  • 102. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rockets
  • 103. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rockets Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoria
  • 104. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rockets Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoria Perchè? 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à :)
  • 105. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN → Comprehensive Perl Archive Network Stop reinventing wheels, start building space rockets Cosa è? E' l'archivio mondiale di riferimento dove trovare classi per ogni esigenza, suddivise per categoria Perchè? 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...
  • 106. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN Testers → Mettono a disposizione delle macchine, sui più disparati OS e mediante procedure automatiche verificano l'esecuzione della classe, riportando errori, warnings, difetti nella documentazione, segnalandoli all'autore URL: metacpan.org cpantesters.org
  • 107. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo CPAN Testers Forniscono all'autore e allo sviluppatore che usa una classe l'indicazione di eventuali problemi, con particolare riferimento all'OS usato, alla versione di Perl utilizzata, alla versione della classe. Tutti i dati sono pubblici. Chiunque può partecipare al progetto e diventare CPAN Tester.
  • 108. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA
  • 109. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi?
  • 110. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi? Le risolve cpan automaticamente, grazie alle informazioni che sono rese obbligatorie agli autori da CPAN.
  • 111. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi? Le risolve cpan automaticamente, grazie alle informazioni che sono rese obbligatorie agli autori da CPAN. E se il mio script lavora in remoto e non posso accedere alla shell?
  • 112. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi? Le risolve cpan automaticamente, grazie alle informazioni che sono rese obbligatorie 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 cui dipende la nostra, istruendo il nostro script del percorso in cui trovarle.
  • 113. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi? Le risolve cpan automaticamente, grazie alle informazioni che sono rese obbligatorie 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 cui dipende la nostra, istruendo il nostro script del percorso in cui trovarle. use lib qq($ENV{DOCUMENT_ROOT}/lib);
  • 114. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Come installo un modulo sul mio computer? $ cpan -i Crypt::FNA E se ci sono dipendenze da altre classi? Le risolve cpan automaticamente, grazie alle informazioni che sono rese obbligatorie 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 cui dipende la nostra, istruendo il nostro script del percorso in cui trovarle. use lib qq($ENV{DOCUMENT_ROOT}/lib);
  • 115. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo
  • 116. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 hash
  • 117. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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.php
  • 118. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 }
  • 119. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 l'ausilio di una sub anonima
  • 120. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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;
  • 121. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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;
  • 122. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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;
  • 123. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 }
  • 124. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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' } );
  • 125. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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();
  • 126. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Leggere e scrivere file XLS # come database → DBD::Excel e quindi il modulo DBI
  • 127. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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()"; } } }
  • 128. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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)');
  • 129. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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');
  • 130. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 dell'immagine $img = Image::Resize->new('large.jpg'); print $image->resize(250, 250); # previa open del file contenitore dell'immagine
  • 131. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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) } );
  • 132. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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()}
  • 133. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • CPAN e moduli di rilievo Adesso creiamo un razzo spaziale: server di streaming use AnyEvent; use RTSP::Server; # istanza del server my $srv = new RTSP::Server( max_clients => 100, client_listen_port => 554, source_listen_port => 5545, rtp_start_port => 20000, client_listen_address => '0.0.0.0', source_listen_address => '0.0.0.0' ); # inizia ascolto $srv->listen; e a questo punto il gestore per i vari eventi... my $cv = AnyEvent->condvar; # ... # ... # ... $cv->recv;
  • 134. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Modern::Perl use Modern::Perl;
  • 135. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggio
  • 136. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Modern::Perl use Modern::Perl; • è sempre Perl e non un altro linguaggio • è un modo di programmare usando le funzioni fornite dalle ultime versioni
  • 137. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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)
  • 138. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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) L'introduzione a Modern::Perl dovrete farla voi inserendolo nei vostri script ed iniziando a programmare
  • 139. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • Modern::Perl Altro? Ci sono le API per programmare in Perl su Android
  • 140. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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!!!
  • 141. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 /], );
  • 142. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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 /], ); http://www.facebook.com/developers/ Qui troverete le API keys ed altri dati.
  • 143. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org 128 Il punto di riferimento di Perl in Italia Associazione Perl.it Il linguaggio di programmazione Perl www.perl.it www.perl.it/associazione www.perl.org Link utili Distribuzioni e IDE Strawberryperl, Perl per MS Windows ActivePerl Padre, Perl IDE strawberryperl.com www.activestate.com/activeperl padre.perlide.org Comprehensive Perl Archive Network Moduli e Classi metacpan.org mongers@lists.perl.it Perlweekly Irc.freenode.net Mailing list, IRC usa Perl responsabilmente use strict; use warnings; IPW, Italian Perl Workshop dal 10 al 12 ottobre 2012 CNR di Bologna. Scoprite il linguaggio che rende facili le cose facili e possibili quelle difficili lists.perl.it/sympa/info/mongers perlweekly.com #perl.it
  • 144. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org • 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)
  • 145. PIT 2012: Workshop@UniNA Introduzione a Modern::Perl di Mario Rossano aka Anak – anak@cpan.org The End! Ringrazio il NaLUG, gli amici della community Perl italiana da cui ho sempre da imparare, l'Università Federico II di Napoli, Facoltà di Ingegneria e soprattutto voi che con pazienza e curiosità avete fatto questo piccolo ed intenso percorso. Grazie :)