Introduzione a Perl

(ed al suo universo)

di

Michele Beltrame

mb@italpro.net

http://www.massainforme.it/mb/

Nordest Perl Mongers

http://nordest.pm.org

Linux User Group Pordenone

26

Contenuti

Cos'è Perl

A cosa serve Perl, chi lo usa

Frammenti di codice Perl

CPAN

La community italiana ed internazionale

Il futuro

E per saperne di più?

26

Cos'è Perl 1

L'illusione della chiarezza

Scritto da un esperto di linguistica

Esegue compiti complessi, permettendo di descriverli in maniera semplice

Cerca di imitare - quando possibile - il modo di esprimersi del linguaggio corrente

#!/usr/bin/perl

$a='#$%K^&*@#$!@#$!@#$#$(*^%$$#&^$#%^$%^*)*(u*#$%^#$&^%&@@^@^@$%^%^

&^%&#^&(*s%*(&#@%^@^@$%^@%$*#^&#^%&@$%^#$56^@%^@$^%t^(34^$%^%^#$%^#

$% #$%^$%^ B%^n%($ %^$# %^$#% ^#$

%^ $%^$#^ #$%^#$ %^$ #%^*o %@&

t^&*^h* ^#$%^&&e@ ^ #$%^& $%^&* #$% ^&$%^ $r%

^$%% Q$ %&%&^%*& *$@ ^%*& ^%&^% %^^ $%^&^ ^%%

^e$*&^& ^*&^(*^ #%*%# ^%& ^%^&% &%% &%*

%&^%*&% r%^%*&$ %^% ^*& &*^

*&^*&lI *%&*^%* &^% %*&% ^(&*& *((

a^ 2 *(&)(*& @$^*) )(* &)(!@#$%@#!& )(*)( *&c

&* (&)(*&) %^&*( (&( *&)(*&(&k(*& ^*(&^ *&%

$%^ &(&%&$e# !@#$% $%^ &#@$%^&r@#$% ^&*@# $';

$_ = eval '$a';tr;[!@#$%^&*()123456789]; ;;s;\n;;g;s; ;;g;s; ; ;g;

tr;[a-z][A-Z];[a-z] [A-Z];;my $zdog;s;([a-z])([A-Z]);$1 $2;g;print;

26

Cos'è Perl 2

La potenza nella sintesi

Rispetto a linguaggi come C o Java, Perl sintetizza le istruzioni

Una riga di Perl può contenere l'equivalente di un programma complesso in un altro linguaggio

use strict;

use warnings;

@

_=q*A*;my$

m ; @_[7,6]=($_[0]

)x2;my@i;@{_}[1..2]=(

'T','T');@i=($[,$!,$]);*t::_

=\&t;$m=\$";$_[4]='L';$"=""

;$_={}+1;sub q{&e;&r};@

i=(u=>n=>i=>q(n));$i[4

]=lc$_[2];$_[-1]++ for#

1..3;$_[1]++;$m=uc(uc(

@i[2 ,].@_[2,].@_

[0 ,]));$_[3]=

$_[5]='O';@i[1

,0]=(qw(r i p))

[0,2]; $::{$m}

= sub{_(&e(&d(&o

(&{c}))))};sub

_{eval"@i\" \"

"};eval"sub @_\{@i(

\$::@_=~/^.* ::(

.* ?)\$/ix)}";&i&&&t ;

*_::n=\& n;a(),&::l;{{&i}

};eval " \&@{[lc$_[0]]};";

*X::=$/ ;_::n()&&&s();&

_;ITA(0 );*X::= $/

;$/.= '';#

P()=>& q,&l,&

_; s( u)(b(

));

e(b(

) );$ _={}*@_;

map{$_->_}(q(t));

&q(&t);*_::_

=\&{'!'};

_::_('EN

D')

26

A cosa serve Perl

Non solo per gli script CGI!

Adatto in molti campi diversi:

Amministrazione di sistema

Applicazioni GUI multipiattaforma

Qualunque attività che richieda lettura, analisi, manipolazione, trasformazioni di dati (soprattutto testuali)

Web programming (CGI, mod_perl, ...)

26

Frozen Bubble

26

Chi usa Perl

Non solo i geek in cerca dell'ultimo grido

Tra gli altri, i seguenti grandi siti sono scritti in Perl:

Adobe

Amazon

Internet Movie Database

Macromedia

Slashdot

26

Elegante e semplice 1

Perl linguaggio write-only = pregiudizio. La leggibilità del codice dipende dal programmatore, e Perl permette di scrivere codice molto leggibile

Pochi tipi (scalari, hash, array)

Molti operatori

Allocazione dinamica della memoria, garbage collection

26

Elegante e semplice 2

Le funzioni accettano facilmente un numero multiplo e variabile di parametri, senza particolari dichiarazioni

Le funzioni possono restituire uno o più valori

Le condizioni si possono esprimere con if o unless

Le condizioni possono sia precedere che seguire un'istruzione

26

Condizioni in Perl

# Condizione prima dell'istruzione

if ($persone > 10) { print “Troppi!” }

unless ($persone <= 10) { print “Troppi!” }

# Condizione dopo l'istruzione

print “Troppi!” if $persone > 10;

# Condizione prima dell'istruzione

$persone <= 10 or print “Troppi!”

26

map() 1

Incrementare gli elementi di una lista:

metodo “classico”:

my @lista = (

1, 2, 32,

40, 7, 120

);

my @listainc = ();

foreach my $num(@lista) {

push @listainc, $num+1;

}

26

map() 2

Incrementare gli elementi di una lista:

metodo “elegante”:

my @lista = (

1, 2, 32,

40, 7, 120

);

my @listainc = map { $_+1 } @lista;

26

grep() 1

Ottenere solo alcuni elementi di una lista -

metodo “classico”:

my @nomi = ('Seattle', 'Auckland',

'Roma', 'Vladivostock');

foreach my $nome(@nomi) {

$nome =~ /t/ and push @nomi_t, $nome;

}

26

grep() 2

Ottenere solo alcuni elementi di una lista:

metodo “elegante”:

my @nomi = ('Seattle', 'Auckland',

'Roma', 'Vladivostock');

my @nomi_t = grep /t/ @nomi;

26

TMTOWTDI 1

La filosofia di Perl in una frase:

There's More Than One Way To Do It

= c'è più di un modo per fare la stessa cosa

Qualunque cosa dobbiate fare, in Perl esiste più di un modo CORRETTO per farla

Si è avuta prova di ciò negli esempi precedenti

26

TMTOWTDI 2

Loop su un array

my @nomi = ('Seattle', 'Auckland', 'Roma');

# Stile C

for (my $i = 0; $i < 3; $i++) {

printf(“%s\n”, $nomi[$i]);

}

# Stile Perl

foreach (@nomi) { print “$_\n”; }

for (0..$#nomi) { print “$nomi[$_]\n”; }

print “$_\n” for @nomi;

26

Regular Expression 1

La caratteristica di Perl che vanta piu tentativi di imitazione

Spesso difficili da leggere, ma sempre efficaci

Risolvono problemi complessi in pochi centimetri di codice, poiché esprimono molte istruzioni

Si usano per trovare, estrarre, filtrare, modificare testo

Se le conosci, manipoli dati in maniera semplicissima e veloce

26

Regular Expression 2

Trovare testo

$str = “la vita è un eterno conflitto”;

if ($str =~ /eterno/) { print “Trovato!\n”; }

# Mette in @parole una parola per elemento

@parole = $str =~ /\w+/g;

# TMTOWTDI

while ($str =~ /(\w+)/g) { push @parole, $1 };

26

Regular Expression 3

Sostituire testo

$str = “sei saggio solo se vivi in un mondo di

stolti”;

# La situazione si rovescia ;-)

$str =~ s/saggio/stolto/;

$str =~ s/stolti/saggi/;

# SEI STOLTO SOLO SE VIVI IN UN MONDO DI SAGGI

$str =~ s/(\w+)/uc $1/ge;

26

One liner 1

La massima potenza in una sola riga

Una motosega a forma di temperino

Perl ha ottimizzazioni esplicitamente orientate alla scrittura di one liner

Non serve nemmeno un editor, scrivi sulla linea di comando e premi invio

Gli one liner in Perl sono quasi un'estensione del sistema operativo

26

One liner 2

Togliere i ^M (CR) da un file

perl -pi -e 's/\r//g' miofile.txt

# Crea file di backup

perl -pi'*.bak' -e 's/\r//g' *.txt

Aggiungere i numeri di riga

perl -pi -e '$_ = sprintf “%03d %s”, $., $_' miofile.txt

26

CPAN: se non lo trovi lì...

Come tutti i linguaggi, Perl non ha tutte le funzioni per fare tutto

Ma è modulare, ed è quindi facile aggiungere un modulo che faccia qualcosa di nuovo

I moduli Perl sono raccolti nel CPAN (Comprehensive Perl Archive Network)

Se vi serve un modulo che faccia una certa cosa, al 99% c'è in CPAN

CPAN non è solo un archivio, ma un hub dove si scambiano idee e si collabora a progetti

26

...allora non esiste!

CPAN offre moduli Perl adatti a:

gestire pagine web

lavorare con i database

leggere e produrre HTML, XML, PDF, ...

comunicare in vario modo con dei server (FTP, telnet, POP3, IMAP, ICQ, ...)

leggere e scrivere file musicali, grafici, ...

...

26

Documentazione in linea

La documentazione di Perl è online su CPAN

Non solo, si trova anche sempre sul vostro computer:

mb@nowhere:~$ perldoc argomento

mb@nowhere:~$ perldoc -f funzione

Alcune distribuzioni forniscono la documentazione anche in HTML (ad esempio ActiveState Perl)

26

La comunità Perl

YAS (Yet Another Society)

Promuove (anche finanziariamente) ricerca e sviluppo in ambito informatico

The Perl Foundation

Si dedica allo sviluppo di Perl tramite dialogo e collaborazione. Coordina:

Perl Monks (www.perlmonks.com)

Perl Mongers (www.pm.org)

26

Perl Mongers

Il termine non ha una traduzione esatta: “perlivendoli” è una buona approssimazione

Sono coloro che cercano di divulgare Perl

Promuovono Perl attraverso incontri, conferenze, workshop, forum online, siti, e quant'altro

Cercano di dimostrare che Perl è bello e utile... ed a volte ci riescono.

26

Nordest Perl Mongers

http://nordest.pm.org

Canale IRC

#nordest.pm su SlashNet (irc.slashnet.org)

Meeting nel Nordest

Assieme agli altri gruppi italiani:

Italian Perl Workshop

Candidatura per YAPC::Europe::2006

Traduzione della documentazione di Perl, assieme ad altri gruppi

26

POD2IT

Un programmatore dovrebbe conoscere un po' di inglese, ma non sempre questo accade, soprattutto per chi inizia

L'obiettivo è tradurre tutta la documentazione di base in italiano

Attualmente sono pronte le FAQ, alcuni documenti, e soprattutto perlfunc

26

PerlMonks

http://www.perlmonks.org

Il più significativo ritrovo di programmatori Perl a livello mondiale

Un luogo dove scambiare opinioni anche di altissimo livello

Una serie di corsi gratuiti, per chi ha voglia di leggere

Un luogo dove imparare a fare una domanda ed a dare una risposta

26

Il futuro

Perl 5 non è un punto di arrivo

Lo sviluppo di Perl 6 è già cominciato

Perl 5 è stato progettato e sviluppato da Larry Wall

Perl 6 sarà la versione della comunità

Il progetto viene discusso pubblicamente

Il motore di Perl 6 (Parrot) potrà gestire anche altri linguaggi

26

Per saperne di più...

Visita www.perl.it, il sito dei Perl Mongers italiani

Segui il newsgroup it.comp.lang.perl

Unisciti a Nordest.pm, o al gruppo di Perl Mongers della tua zona

Frequenta Perl Monks

26

Michele Beltrame

2003-11-13T08:54:10