• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Serva95

Utente Attivo
Autore del topic
16 Giugno 2010
327
0
Miglior risposta
0
Introduzione
PERL è un linguaggio multi-purpose. Può essere utilizzato per programmare qualsiasi processo, sia remoto, che locale. Tuttavia il campo dove ha ottenuto maggior popolarità è lo scripting Web per la scrittura di CGI. Con l'espansione di Internet, Perl si è progressivamente diffuso come linguaggio di scripting, cioè come linguaggio interpretato da usarsi per creare, in maniera semplice e veloce, applicazioni server-side. In realtà Perl è molto più di questo, in quanto si tratta di un completo linguaggio di programmazione con cui si possono creare applicativi di ogni tipo, dai semplici script per la gestione del sistema a complesse applicazioni con tanto di sofisticata interfaccia grafica. Uno degli aspetti che ha portato al grande successo di Perl è la sua portabilità: lo stesso sorgente può infatti essere eseguito, praticamente senza alcuna modifica, su piattaforme che vanno da Linux a Windows a MacOS. Perl è attualmente utilizzato da un numero grandissimo di sviluppatori, e questo ha fatto sì che ora sia possibile trovare in giro qualsiasi libreria per il linguaggio, per l'interfacciamento con qualsiasi software o periferica, rendendolo quindi adatto per qualsiasi uso, al pari di linguaggi dal nome più blasonato quali C++ oppure Java.
Compilato o interpretato?
Perl è tradizionalmente un linguaggio interpretato. Se dal punto di vista della velocità può rappresentare un problema, questo è stato invece uno dei punti di forza del linguaggio: il non dover compilare i sorgenti semplifica infatti notevolmente lo sviluppo in quanto si possono tranquillamente sviluppare i propri programmi sul proprio computer di casa (che ad esempio gira sotto *****soft Windows o Linux) e poi caricare direttamente i sorgenti sul server di rete su cui devono girare (nel quale è magari installato FreeBSD o qualche altro sistema operativo). Altro vantaggio di un linguaggio interpretato è la semplicità con cui si può correggere un errore in un sorgente già caricato sul server: basta un client FTP ed un normale editor di testi ed il gioco è fatto.

Nonostante tutto, ad un certo punto si è presentata la necessità, per alcuni scopi che necessitano di una certa velocità di elaborazione, di compilare i sorgenti Perl in eseguibili nativi. Il primo a tentare di risolvere il problema è stato Malcom Beattie, il quale ha creato due moduli che si occupano l'uno di compilare il sorgente Perl in un bytecode semi-interpretato (qualcosa di simile ai file .class del Java) e l'altro di convertire il sorgente da Perl a C. La prima soluzione in effetti velocizza l'esecuzione del tutto, ma il programma generato rimane dipendente da troppe librerie "accessorie". Il secondo modulo crea invece un codice C poco piacevole da leggere ma facilmente compilabile con un qualsiasi compilatore quale ad esempio GCC: si può a questo punto scegliere se ottenere un eseguibile linkato dinamicamente (ed in questo caso bisognava portarsi dietro una libreria) oppure un gigantesco eseguibile linkato staticamente. Le soluzioni di Malcom sono quelle che ancora oggi si rivelano vincenti per la compilazione del Perl: il problema era che solo una parte dei programmi Perl potevano essere dati in pasto al suo software, perennemente in fase di alpha testing. Oggi esistono alcuni compilatori commerciali di buon livello quali Perl2Exe e PerlApp.
I vari kit di sviluppo
Esistono ormai varie distribuzioni di Perl, per molte piatttaforme. La più famosa è naturalmente l'originale, quella creata da Larry Wall, che funziona praticamente su tutti i sistemi Unix esistenti e, nelle versioni più recenti, anche su Windows. La versione attuale è la 5.8.2, in costante aggiornamento. Parallelamente è partito un progetto di riscrittura dell'intero pacchetto, con ridefinizione radicale del linguaggio in se, che dovrebbe portare a Perl 6. Di fatto sotto Unix non serve in generale preoccuparsi di procurarsi il linguaggio, in quanto viene incluso nell'installazione base della quasi totalità dei sistemi. Esistono poi le distribuzioni per Windows, la più nota delle quali è ActivePerl, alla quale collabora la stessa *****soft, e che implementa più o meno tutte le caratteristiche del Perl originale. Recentemente sono inoltre comparsi i primi tool di sviluppo grafici. La stessa ActiveState, creatrice di ActivePerl e PerlApp, propone un IDE, Komodo, che supporta anche un certo numero di altri linguaggi ed include un debugger.
Tutte le risorse rintracciabili in rete
Il maggiore supporto al linguaggio arriva da Internet: sono disponibili infatti risorse di ogni tipo. Il sito "istituzionale" è Perl.com Home Page, creato dal Perl guru Tom Christiansen ed attualmente gestito da O'Reilly & Associates: qui si trovano i link a tutto quello che serve per iniziare a programmare, nonché tutte le ultime novità sul linguaggio. Altro sito leggendario è il CPAN (Comprehensive Perl Archive Network, CPAN), che raccoglie praticamente tutti i moduli (librerie) esistenti ed ha mirror in tutto il mondo. Molto interessante è anche Perl Mongers (The Perl Programming Language -
Perfavore, Entra oppure Registrati per vedere i Link!
), contente vari link interessanti ed è utilizzabile ad esempio per cercare un posto di lavoro che coinvolga la conoscenza del Perl. Un valido aiuto, un punto di incontro dove scambiarsi consigli sul Perl oppure semplicemente fare quattro chiacchiere è rappresentato dagli user group di Perl Mongers (Perl Mongers), moltissimi e sparsi in tutto il mondo: dal sito centrale è possibile accedere a quelli relativi alle specifiche aree geografiche (in Italia ci sono Bologna.pm, Nordest.pm, Pisa.pm, Roma.pm, Salerno.pm e Torino.pm). Su quest'ultimo sito inoltre possibile acquistare un po' di abbigliamento "perloso", nonché registrarsi in modo da essere reperibili da altri programmatori che vivono nell'area dove si risiede. PerlMonks (PerlMonks - The Monastery Gates) è una grandiosa risorsa dove chiedere aiuto, cercare informazioni e scambiare opinioni; è frequentato dai più noti programmatori Perl a livello mondiale. Il punto di riferimento in italiano è invece Perl.It (Perl.it - Il punto di riferimento del linguaggio Perl in Italia). Un corso online e molti script da cui trarre spunto sono presenti su HTML.it. Ottime risorse sono inoltre i newsgroup: in Italia è stato attivato it.comp.lang.perl, in cui c'è poco "rumore di fondo" ed un po' di gente disponibile a fornire preziosi consigli.

Adesso passiamo dalla teoria alla parte un po + pratica
L'interfaccia CGI
Uno script CGI può essere richiamato mediante una form HTML.

Ho racchiuso Delle parti in tag HTML Così è piu facile da capirlo.
Caratteristiche fondamentali
Perl = Practical Extraction and Report Language

È un linguaggio interpretato orientato alla gestione di file ASCII ed alla manipolazione di stringhe mediante espressioni regolari.

#!/bin/perl
# Primo esempio
$file = shift ;
open (IN, "< $file") || die "Errore\n\n" ;
@dati = ;
close(IN) ;
@dati = sort(@dati) ;
foreach $k (@dati) {
print "$k" ;
}

Istruzioni principali
if (condizione) {
blocco di istruzioni
} else {
altro blocco di istruzioni
}

while (condizione) {
blocco di istruzioni
}

for (ass. iniziale ; condizione ; incremento) {
blocco di istruzioni
}

Variabili e tipi
Variabili scalari: numeri interi, numeri razionali, stringhe ($var) .
Es. : $nome = 'Marco' ; $c = $a+$b ; $c = "$a+$b" ; $riga = ; $data = `date` ;


Liste o array di scalari: @var; gli elementi di una lista sono scalari: $var[3].
Es. : @mesi = ('Gen','Feb','Mar') ; $mese[0] = 'Gen' ; $n = $#mesi ; @nomi = sort @nomi ; @file = ;

Array associativi : %var ; gli array associativi sono indicizzati da stringhe :
Es. : $cognome{'Marco'} = 'Liverani' ; @nomi = sort keys %cognome ;

Le variabili non devono essere dichiarate: viene fatto un cast automatico in base al contesto.

Espressioni Regolari
Consentono di rappresentare un insieme di stringhe di caratteri, specificandone uno schema.

Sono costruite componendo alcuni simboli che svolgono il ruolo di meta caratteri :

. = qualsiasi carattere
\s = un simbolo di spaziatura
\d = una cifra
\w = una lettera

da altri simboli che servono come quantificatori :

? = zero o una volta
+ = una o più volte
* = zero o più volte

da ancore che forzano la posizione della sottostringa :

^ = la stringa inizia per ...
$ = la stringa termina per ...

Altri caratteri rappresentano se stessi : a, b, c, 1, 2, 3, ecc.

Esempi :

\d+\s\w*
almeno un carattere numerico, uno spazio, un numero arbitrario di caratteri qualsiasi ;

^Nome:.+\sEtà:\d+$
una riga che inizia con la stringa "Nome:", seguita da una stringa non vuota di caratteri qualsiasi, uno spazio, la sottostringa "Età:" e che termina con un numero.

Le espressioni regolari descrivono un automa riconoscitore, in grado di accettare o rifiutare determinate stringhe in base alla grammatica specificata mediante l'espressione regolare :
grafo.gif

Patter matching

* Consiste nel verificare che una stringa o una sua sottostringa sia costruita secondo uno schema descritto da una espressione regolare :

l'istruzione

$var =~ /espressione regolare/

restituisce "vero" se il pattern matching riesce, "falso" altrimenti.

* Esempi :

if $testo=~ /^Subject:\s.*$/i {
print "$testo\n" ;
}

while ($riga = ) {
$riga =~ /^Subject:\s(.*)$/ && print "$1\n" ;
}

Pattern substitution

* Sostituzione di sottostringhe individuate mediante espressioni regolari con altre stringhe.

* L'istruzione

$var =~ s/espressione regolare/stringa di sostituzione/[g]

sostituisce in $var la sottostringa descritta dall'espressione regolare con la stringa di sostituzione.

* Mediante l'uso delle parentesi è possibile memorizzare porzioni di stringa, da richiamare in seguito con \1, \2, ... e $1, $2, ...

* Esempi :

$var =~ s/Nome:\s(\w+)\sEtà:\s(\d+)/\1, \2 anni/ ;

for ($i=0 ; $i<=$#array ; $i++) {
$array[$i] =~ s/$v1/$v2/g;
}

$data =~ s/(\d\d)\/(\d\d)\/(\d\d)/\1 $mese[\2] \3/ ;

Adesso passiamo alle Procedure CGI in Perl

Interazione con programmi esterni

# È possibile richiamare da uno script Perl altri eseguibili esterni in tre modi :

* mediante la funzione system : system("cal");

* mediante gli apici inversi : $data = `date`;

* mediante un canale di pipe : open(OUT,"| /bin/mail root");

# Esempio :

$data = `date +%d/%m/%y` ;
@indirizzi = `grep "mat.uniroma1.it" address` ;
foreach $IND (@indirizzi) {
($nome, $mail) = split(/:/, $IND) ;
open(OUT, "| /bin/mail $mail") ;
print OUT "Roma, $data\n" ;
print OUT "Caro $nome,\n...\n" ;
close(OUT) ;
}

Introduzione

* Uno script CGI deve ricevere dei parametri in input attraverso l'interfaccia CGI, effettuare l'elaborazione necessaria e restituire un output formattato secondo un MIME type riconosciuto, attraverso il canale standard di output che verrà rediretto dall'interfaccia CGI verso il browser dell'utente remoto.

* I dati in input sono passati :

o mediante la variabile di ambiente QUERY_STRING (metodo GET) ;

o attraverso lo standard input (metodo POST).

In entrambi i casi REQUEST_METHOD indica il metodo utilizzato.

* Esempio :

REQUEST_METHOD = "GET"

QUERY_STRING = "nome=Marco+Liverani&citta=Roma&tel=255"

* L'output deve essere preceduto da una instestazione che ne dichiara il tipo del contenuto ;

Esempio : "Content-type: text/html"

La libreria cgilib.pl

# Esiste una libreria di funzioni del Perl che consente di comunicare facilmente con l'interfaccia CGI. La libreria deve essere richiamata mediante l'istruzione

require("/usr/local/lib/perl/cgilib.pl") ;

# La libreria ci mette a disposizione la funzione "ReadParse( )", che restituisce un array associativo (%in) in cui vengono inserite tutte le variabili passate attraverso uno qualunque dei due metodi (GET o POST) : $in{variabile} = valore.

# Esempio :

$in{nome} = "PERL+32" ;

$in{citta} = "L'aquila" ;

Esempio : form di input

La seguente pagina HTML consente di inserire dei dati e di richiamare lo script Perl che provvederà alla memorizzazione su un file.
Esempio : script CGI di archiviazione

* Il seguente script riceve in input i dati della form e li archivia su un file :

#!/bin/perl
require("/usr/local/lib/perl/cgilib.pl") ;
&ReadParse( ) ;
open(OUT, ">> archivio") ;
print OUT "$in{cognome}|$in{nome}|$in{citta}\n" ;
close(OUT) ;
print <<"END" ;
Content-type: text/html



Grazie per l'inserimento


END

Esempio : form di interrogazione

La seguente pagina HTML consente di introdurre dei parametri per effettuare una ricerca sul file archivio.

Esempio : Script di Ricerca


Il seguente script effettua una ricerca nel file e visualizza i record individuati :

#!/bin/perl
require("/usr/local/lib/perl/cgilib.pl") ;
&ReadParse( ) ;
print "Content-type: text/html\n\n" ;
print "\n" ;
open (ARC, "< archivio") ;
while ($record=) {
($cognome, $nome, $citta) = split(/\|/, $record) ;
if ($nome =~ /$in{nome}/) {
print "Nome: $nome
Cognome: $cognome
Citta': $citta
\n" ;
}
}
close(ARC) ;
print "\n" ;

LOGO :
perl_logo2.gif



Questo è Solo Un Piccolo Imput a Questo Magnifico Linguaggio.

Fonte : un pò da tutto il web[Forum vBulletin]
Perfavore, Entra oppure Registrati per vedere i Link!
.
 
Ultima modifica:
  • Like
Reactions: 1 person
E' tutta teoria... di pratica non c'è niente... solo qualche riga di codice...
 
grazie dei vostri commenti ^_^
In questi giorni mi sono appassionato della programmazione
 
cita la fonte e ricorda un utente non è mai considerato bravo quando copia guide e non cita la fonte
 
Come ha detto centrino, posta la fonte! non dire che la hai fatta tu che è copiata in modo orrendo -.-

Comunque, bravo :emoji_relieved:
 
La Guida è Interamente tua? Ma se hai Copia/Incollato tutto...

Inserisci i siti da dove hai preso le notizie , Grazie ^^
 
Riferimento: Il Perl. Uno Dei "Famosi" Linguaggi Di Scripting.

Ottimo, molto utile :-)​