Perl: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
(64 versioni intermedie di 47 utenti non mostrate)
Riga 1:
{{nd}}
{{nota disambigua|titolo=[[Perl (Germania)]]|descrizione=il comune tedesco nella [[Saarland]]}}
{{NN|informatica|marzo 2016|Presenti solo 2 note di conto}}
{{tmp|Linguaggio di programmazione}}
{{Linguaggio di programmazione
[[File:Hello World Perl GTk2.png|thumb|300px|Codice ed esecuzione di un semplice programma dimostrativo (chiamato "[[Hello world]]") scritto in linguaggio Perl.]]
|nome = Perl
|immagine =
|didascalia =
|autore = [[Larry Wall]]
|data = 1987
|versione =
|utilizzo = general-purpose
|paradigmi = multi-paradigma: [[Programmazione funzionale|funzionale]], [[Programmazione imperativa|imperativo]], [[Programmazione orientata agli oggetti|orientato agli oggetti]], [[Riflessione (informatica)|riflessivo]], [[Programmazione procedurale|procedurale]]
|tipizzazione = [[Tipizzazione dinamica|dinamica]]
|specifiche =
|estensione = .pl .pm .t
|influenzato_da = <!-- Lista di linguaggi che hanno influenzato il linguaggio in esame, citare le fonti -->
|ha_influenzato = [[Perl 6]], [[PHP]]
|implementazione_riferimento = [[Linguaggio interpretato|interprete]]
|sistema_operativo = [[Multipiattaforma]]
|lingua = <!-- Lingue supportate dall'impl. di riferimento -->
|licenza = [[GNU General Public License]] o [[Licenza artistica]]<ref name='licensing'>{{Cita web | url = https://dev.perl.org/licenses | titolo = Perl Licensing | accesso=18 giugno 2012 | editore = dev.perl.org}}</ref>
|sito_web =
}}
[[File:Hello World Perl GTk2.png|miniatura|upright=1.4|Codice ed esecuzione di un semplice programma dimostrativo (chiamato "[[Hello world]]") scritto in linguaggio Perl]]
 
'''Perl''' è un [[linguaggio di programmazione ad alto livello]], dinamico, procedurale e interpretato, creato nel 1987 da [[Larry Wall]]. Perl ha un singolare insieme di funzionalità ereditate da [[C (linguaggio)|C]], [[Linguaggio di scripting|scripting shell]] [[Unix]] ([[Bourne shell|sh]]), [[Awk]], [[sed (Unix)|sed]] e in diversa misura da molti altri linguaggi di programmazione, compresi alcuni linguaggi funzionali.
 
== IntroduzioneDescrizione ==
 
Benché sia molto noto come linguaggio per lo sviluppo di [[Common Gateway Interface|CGI]], Perl è stato creato inizialmente come ausilio ai [[sistemista|sistemisti]], come linguaggio di manipolazione di testo e file. Infatti è anche detto '''''P'''ractical '''E'''xtraction and '''R'''eport '''L'''anguage'',<ref>{{Cita manews|lingua=en|url=https://www.techopedia.com/definition/3941/practical-extraction-and-report-language-perl|titolo=What questois èPerl? un- acronimoDefinition assegnatofrom dopoTechopedia|pubblicazione=Techopedia.com|accesso=2017-09-26}}</ref>, lama creazionequesto delè nomeun o,[[acronimo in inglese, un "backronym"inverso]]. Pertanto secondo la documentazione stessa di Perl, non vi si dovrebbe mai riferire come "PERL", ma come "Perl" o "perl" a seconda che si intenda il linguaggio in quanto tale o una specifica implementazione rispettivamente<ref>{{Cita web|url=https://perldoc.perl.org/perlfaq1.html|titolo=perlfaq1 È- anzi questa un'informazione utilizzata negli ambienti perlistici per distinguere "chi è del giro" da chi non lo èperldoc.perl.org|sito=perldoc.perl.org|lingua=en|accesso=2017-09-26}}</ref>.
 
Si è evoluto nel tempo, anche grazie ad un potente sistema di moduli, in un linguaggio a carattere più generale, comprendente l'elaborazione di immagini, l'interrogazione di banche dati, i processi di comunicazione via rete, ed utilizzabile in tutti quegli ambiti in cui non siano strettamente necessarie le performance di un linguaggio compilato più a un più basso livello, offrendo alin contempoaggiunta tempi di sviluppo molto più rapidi. È quindi anche utilizzato per la [[prototipizzazione]] di programmi da implementarsi in altri linguaggi.
 
Il linguaggio è stato pensato per essere pratico (facile da usare, efficiente, completo) oltre che bello e "magico" (è questo un concetto tipicamente perlistico); esso non è mai stato pensato per essere compatto, elegante o minimale, infatti il suo motto più distintivo è riassunto nell'acronimo ''TMTOWTDI'' (There is More Than One Way To Do It), che in ingleseitaliano molto indicativamente significa "c'è più di un modo per farlo".<ref>{{Cita Tuttaviaweb|url=https://www.urbandictionary.com/define.php?term=TMTOWTDI|titolo=Urban unoDictionary: deiTMTOWTDI|sito=Urban suoiDictionary|lingua=en|accesso=2017-09-26}}</ref> maggiorLarry pregiWall èha detto che grazie a tale ricchezza consentel'obiettivo di risolverePerl conè grande«rendere semplicitàle edcose eleganzafacili, problemifacili, chee conquelle altridifficili, linguaggipossibili» richiederebbero(«''Make notevolithe sforzi.easy Infattithings Larryeasy, Walland amathe ripeterehard chethings unopossible.»'').<ref>{{Cita deilibro|autore=Larry suoiWall|autore2=Randal obiettiviL. èSchwartz|autore3=Tom "rendereChristiansen|titolo=Programming le cose facili, facili, e quelle difficili, possibili"Perl|url=https://archive.org/details/perlcdbookshelf0000unse|edizione=2|anno=1999|editore=O'Reilly|città=Sebastopol|lingua=en|OCLC=43840699|ISBN=9781565924628}}</ref>
 
Perl supporta sia il paradigma procedurale che quello [[object oriented|ad oggetti]], ha potenti funzioni per l'elaborazione dei testi ed è dotato di una delle maggiori collezioni di moduli prodotte dalla sua vasta comunità di utenti.
 
=== Caratteristiche del linguaggio ===
 
Se a prima vista il Perl appare largamente derivato dal C, in verità ha ricevuto questa somiglianza mediata dai linguaggi di scripting delle shell.
Perl è un linguaggio procedurale non tipizzato con variabili, espressioni, assegnamenti, blocchi delimitati da graffe, strutture di controllo e subroutine.
Queste ultime possono essere intese come funzioni e il Perl ha numerose doti mediate dai linguaggi funzionali.
 
Le variabili hanno un prefisso ($ per variabili scalari, @ per [[array]], % per hash) detto ''sigillo'' e se questo in parte ha determinato la ricchezza sintattica del Perl, permette l'interpolazione delle variabili nelle stringhe. Come le shell Unix, Perl è dotato di molte funzioni di serie per i compiti più comuni come ordinamento ed accesso al sistema operativo. (In verità solo 279 nel nucleo principale del perl, contro le oltre 3000 del [[PHP]]).
 
Perl ha preso i vettori associativi (conosciuti come 'hash') da [[awk]] e le [[espressione regolare|espressioni regolari]] da sed. Queste semplificano e facilitano molto il parsing ed i compiti di trattamento del testo e dei dati.
Riga 28 ⟶ 48:
In verità con i moduli Inline:: sono diversi i linguaggi in cui possono essere definite le funzioni di un sorgente Perl.
 
Perl è comunemente ritenuto un [[Linguaggio di programmazione|linguaggio interpretato]], ossia che per essere eseguito viene interpretato al momento dell'esecuzione. In realtà, la prima cosa che fa l'interprete è di trasformare il codice sorgente in [[bytecode]], un po' come Java; sul bytecode crea un [[grafo]] intermedio sul quale applica ottimizzazioni, ed è questo grafo ad essere interpretato. Questo approccio permette di limitare la lentezza tipica dei linguaggi interpretati. La versione del [[Perl 6]]<ref>{{Cita web|url = http://perl6.org|titolo = Perl 6|accesso = 2015-08-06|sito = perl6.org}}</ref>, in via di sviluppo da alcuni anni, divide l'esecutore del bytecode (o virtual machine) dal linguaggio in modo tale da permetterne l'utilizzo anche da compilatori di altri linguaggi, tra cui [[Tcl]], [[Python]], [[Java (linguaggio di programmazione)|Java]], etc.
 
La virtual machine che ne deriva sarà una nuova base per lo sviluppo di linguaggi liberi e consentirà livelli di ottimizzazioni molto elevati e indipendenza dallo sviluppo dei linguaggi sovrastanti.
Nonostante il Perl 6 non sia ancora rilasciatodistribuito, alcune idee sono percolate nella versione stabile del Perl 5.8 e molte altre avranno un riscontro in Perl 5.10. Un prototipo del Perl 6, chiamato [http://www.pugscode.org/ Pugs], è stato sviluppato in [[Haskell (linguaggio)|Haskell]] e si sta verificando una interessante fertilizzazione reciproca tra le due comunità (Perl ed Haskell).
 
Ancora una volta è stato messo in evidenza come il Perl sia un linguaggio "socievole", che tende quindi a interagire con gli altri linguaggi e ambienti di sviluppo, siano essi: dialetti shell, altri linguaggi interpretati, linguaggi specializzati (come l'SQL), o i più comuni linguaggi compilati. Questa è la ragione che determina il successo di Perl nell'integrazione di sistemi diversi.
 
Perl è nato in ambiente [[Unix]] e distribuito contemporaneamente con due licenze liberali, la [[GNU General Public License|GPL]] e la [[Licenza Artistica]], è disponibile anche per i sistemi operativi [[Microsoft Windows]] e [[Macintosh|MacOS]] precedente alla versione MacOSMac OS X (che appartiene alla famiglia Unix).
L'implementazione per Windows più diffusa viene distribuita da una società, la ActiveState, che da
un lato offre sotto una licenza libera moduli specifici per il [[sistema operativo]] Windows, dall'altro vende degli ambienti di sviluppo integrati, sia per Perl che per altri linguaggi open source quali ad esempio [[Python]] e [[Tcl]].
Riga 44 ⟶ 64:
* dall'altro viene apprezzato per la facilità di scrivere programmi potenti ma semplici, per la libertà semantica che lascia al programmatore al punto che "non c'è un unico modo di fare le cose" è uno dei modi di dire legati a Perl.
 
Wall - che per formazione è un linguista - ritiene questa libertà semantica un pregio, in quanto più simile al linguaggio umano. Un ulteriore aspetto positivo che attrae i programmatori è l'ampia disponibilità di moduli rilasciatidistribuiti con licenze open source, quasi sempre le stesse di Perl. Moduli solitamente documentati bene, in quanto il linguaggio stesso offre il Pod, un modo di includere la documentazione all'interno del codice, garantendo così che assieme al modulo ci sia pure la documentazione. La comunità ha creato un sito particolare, chiamato [[CPAN]], il quale organizza per argomenti i moduli ritenuti particolarmente validi. I moduli stessi non sono archiviati in quel sito, ma rimangono sui siti scelti dai loro autori. Infine, in quanto linguaggio interpretato e dunque sempre distribuito con il codice sorgente visibile, favorisce la pratica liberale.
 
Altre caratteristiche importanti di Perl sono:
Riga 54 ⟶ 74:
* la possibilità di applicare paradigmi di programmazione diversi, come quello funzionale o quello ad oggetti.
 
Alcune caratteristiche del Perl, tra cui la sintassi, permettono una sintesi raramente possibile con altri linguaggi ed impossibile con linguaggi tipo Java e i sorgenti possono dunque essere molto densi di significato, tanto da risultare criptici a chi non ne conosca i rudimenti. In compenso su Internet c'è così tanta documentazione sul Perl che è possibile avvicinarsi rapidamente al linguaggio e con opportuni testi di riferimento iniziarne la strada dell'apprendimento.
 
Il linguaggio e l'interprete vengono sviluppati da un gruppo di circa cento sviluppatori, guidati da Wall, il quale prende le decisioni finali su cosa includere nel codice. Gli sviluppatori hanno creato il Perl Institute per facilitare lo sviluppo di Perl e migliorarne la visibilità e organizzano conferenze. Wall stesso lavora per la O'Reilly, una casa editrice che sostiene attivamente il movimento Open Source.
 
Perl fa parte degli strumenti standard dei sistemi operativi Unix. Il suo aggiornamento può essere fatto sia da Internet che tramite le distribuzioni dei sistemi operativi liberi, quali [[GNU/Linux]],
[[BSD]], ecc. Le versioni per Windows possono anch'esse essere scaricate da [[Internet]]. Ad alcuni manuali di Perl viene allegato un [[CD-Rom]] comprendente le versioni per diversi sistemi
alcuni manuali di Perl viene allegato un [[CD-Rom]] comprendente le versioni per diversi sistemi
operativi e tutti i moduli compresi nel CPAN.
 
La comunità Perl è sovente attaccata per l'assenza di un [[IntegratedAmbiente developmentdi environmentsviluppo integrato|IDE]] come quelli presenti per Java che rendano semplice l'avvicinamento al linguaggio da parte dei neofiti.
In realtà la ricchezza espressiva del Perl rende complicata la realizzazione di un IDE che evidenzi errori di costruzione degli statement, e dati i numerosi valori di default delle funzioni base risulterebbe oltremodo difficile comprendere in automatico cosa vuole ottenere il programmatore, dove c'è un errore o forse no. Tuttavia Eclipse contiene un'estensione per il Perl e forse altri editor di codice seguiranno.
 
Gli sviluppatori Perl esperti, in verità, non sentono l'esigenza di strumenti diversi da [[vi (software)|vi]] o [[Emacs]], e quest'ultimo in particolare permette di effettuare il [[debugging]] di ogni programma Perl, con narrowing, colorazione della sintassi, macro, breakpoint, single step etc.
 
== Programmi di esempio ==
=== Leggere lo standard input in formato CSV e stamparne i 2 campi iniziali ===
=== [[Hello world|Hello, world!]] ===
Il seguente esempio stampa il testo "[[Hello world]]".
<source lang="perl">
#!/usr/bin/perl
print "Hello World";
</source>
Da notare che la prima riga non è una direttiva per il linguaggio Perl, bensì un commento (il carattere "#" indica un commento). Questa riga, chiamata in gergo "[[shebang]]", viene interpretata da alcuni sistemi operativi e serve ad invocare il programma eseguibile del linguaggio Perl che eseguirà le righe successive.
 
Nell'esempio, l'interprete si trova nella [[directory]] ''/usr/bin/perl''; per trovare tale directory in ambiente [[Linux]] si può utilizzare (tramite [[shell (informatica)|shell]]) il comando
 
<source lang="bash">
which perl
</source>
 
=== Leggere lo standard input in formato [[Comma-separated values|CSV]] e stamparne i 2 campi iniziali ===
 
<sourcesyntaxhighlight lang="perl">
#!/usr/bin/perl
#con i campi puoi fare quello che vuoi
Riga 92 ⟶ 95:
print "$campo[0],$campo[1]\n";
}
</syntaxhighlight>
</source>
 
In questo esempio vi sono una serie di default che non è possibile comprendere senza una spiegazione:
* <> è un sinonimo per <ARGV> che a sua volta è un iteratore su un ''filehandle'' speciale che si riferisce ai file specificati sulla riga di comando, se ve ne sono o a STDIN altrimenti ed indica l'azione di estrarre una riga da tale filehandle. questaQuesta riga, senza ulteriori istruzioni, viene inserita in $_ che è una variabile predefinita su cui molti operatori e funzioni agiscono di default.
* split prende un ''pattern'' (espressione regolare) ed a meno che non si specifichi diversamente agisce sulla variabile $_, spezzandola in corrispondenza dei punti in cui il pattern trova corrispondenza, e restituendo i pezzi rimanenti.
 
Lo stesso programma poteva essere riscritto nella seguente forma:
 
<sourcesyntaxhighlight lang="perl">
#!/usr/bin/perl
while(<>) {
Riga 106 ⟶ 109:
print "$campo1,$campo2\n";
}
</syntaxhighlight>
</source>
 
In questo secondo caso notiamo come sia possibile scrivere lo stesso programma in un altro modo.
OvviamenteEsistono esistono moltimolte altre scritture di questo stesso breve programma.
 
Nota: la dichiarazione ''my'' non è strettamente necessaria a meno che non si utilizzi il modulo pragmatico ''strict'', ma quest'ultimo è raccomandato dalla stragrande maggioranza di programmatori perl, insieme a ''warnings'', poiché restringe la libertà del programmatore in modi che prevengono di compiere errori di programmazione banali ma molto comuni, obbligando a pratiche di programmazione più disciplinate che in altri linguaggi sono imposte di default.
 
== Note ==
<references />
 
== Bibliografia ==
* {{en}} httphttps://www.oreilly.com/catalog/pperl3 Programming Perl, detto anche Camel Book
* {{en}} httphttps://www.oreilly.com/catalog/learnperl4 Learning Perl, detto anche Lama Book
* {{en}} httphttps://www.oreilly.com/catalog/intermediateperl Intermediate Perl
* {{en}} httphttps://www.oreilly.com/catalog/perlbp Perl Best Practices
* {{en}} http://hop.perl.plover.com Higher-Order Perl
* {{en}} httphttps://wwwweb.archive.org/web/20051110081542/http://manning.com/books/conway Object Oriented Perl di Damian Conway
 
== Voci correlate ==
 
* [[Black Perl]]
* [[Code golf]]
* [[BioPerl]]
 
== Altri progetti ==
{{interprogetto|commons=Category:Perl (programming language)|b=Perl}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* [http://www.perl.it http://www.perl.it]
* {{FOLDOC}}
* [http://conferences.yapceurope.org/ipw2009 Italian Perl Workshop 2009]
* {{cita web | 1 = http://www.perl.it | 2 = http://www.perl.it | accesso = 18 luglio 2003 | urlarchivio = https://web.archive.org/web/20030719041946/http://perl.it/ | dataarchivio = 19 luglio 2003 | urlmorto = sì }}
* [http://www.perl.it/documenti/articoli/yp/index.html http://www.perl.it/documenti/articoli/yp/index.html]
* [{{cita web|http://wwwconferences.perlyapceurope.itorg/documenti/faq/list.htmlipw2009|Italian Perl FAQ]Workshop 2009}}
* {{cita web | 1 = http://www.perl.it/documenti/articoli/yp/index.html | 2 = http://www.perl.it/documenti/articoli/yp/index.html | accesso = 18 luglio 2003 | urlarchivio = https://web.archive.org/web/20030830132249/http://www.perl.it/documenti/articoli/yp/index.html | dataarchivio = 30 agosto 2003 | urlmorto = sì }}
* {{en}} [http://www.perl.org http://www.perl.org]
* {{cita web | 1 = http://www.perl.it/documenti/faq/list.html | 2 = Perl FAQ | accesso = 21 novembre 2006 | urlarchivio = https://web.archive.org/web/20061209152312/http://www.perl.it/documenti/faq/list.html | dataarchivio = 9 dicembre 2006 | urlmorto = sì }}
* {{en}} [http://www.perl.com http://www.perl.com]
* {{en}}cita [httpweb|https://www.cpanperl.org L'archivio coordinato dei moduli disponibili]/|https://www.perl.org/|lingua=en}}
* {{en}}cita [web|http://www.perlmonksperl.org com|http://www.perlmonksperl.org]com|lingua=en}}
* {{en}}cita [web|http://www.pmcpan.org|L'archivio http://www.pm.org]coordinato dei moduli disponibili|lingua=en}}
* {{en}}cita [web|http://www.perldocperlmonks.org |http://www.perldocperlmonks.org]|lingua=en}}
* {{cita web|http://www.pm.org|http://www.pm.org|lingua=en}}
* {{cita web|1=http://www.perldoc.org|2=http://www.perldoc.org|lingua=en|accesso=17 novembre 2019|urlarchivio=https://web.archive.org/web/20110505083213/http://perldoc.org/|dataarchivio=5 maggio 2011|urlmorto=sì}}
 
{{Framework per applicazioni web}}
{{Principali linguaggi di programmazione}}
{{FOSS}}
{{Controllo di autorità}}
{{portale|informatica}}
 
[[Categoria:Perl|Perl ]]
[[Categoria:Linguaggi di scripting]]
[[Categoria:Acronimi]]
{{Link VdQ|de}}
{{Link VdQ|en}}
 
[[als:Perl]]
[[ar:بيرل]]
[[bat-smg:Perl]]
[[bg:Пърл (език за програмиране)]]
[[bn:পার্ল (প্রোগ্রামিং ভাষা)]]
[[bs:Perl]]
[[ca:Perl]]
[[ckb:پێرڵ (وێب داڕشتن)]]
[[cs:Perl]]
[[cy:Perl (cyfrifiadureg)]]
[[da:Perl]]
[[de:Perl (Programmiersprache)]]
[[el:Perl]]
[[en:Perl]]
[[eo:Perl]]
[[es:Perl]]
[[et:Perl]]
[[eu:Perl]]
[[fa:پرل (زبان برنامه‌نویسی)]]
[[fi:Perl]]
[[fr:Perl (langage)]]
[[ga:Perl]]
[[gl:Perl]]
[[gu:પર્લ]]
[[he:Perl]]
[[hi:पर्ल]]
[[hr:Perl]]
[[hu:Perl (programozási nyelv)]]
[[id:Perl]]
[[ja:Perl]]
[[ka:პერლი]]
[[ko:펄]]
[[ku:Perl]]
[[la:Perl]]
[[lb:Perl (Programméiersprooch)]]
[[lt:Perl]]
[[lv:Perl]]
[[mk:Perl]]
[[ml:പേള്‍]]
[[mr:पर्ल (संगणकभाषा)]]
[[ms:Perl]]
[[my:Perl]]
[[nl:Perl (programmeertaal)]]
[[nn:Perl]]
[[no:Perl]]
[[pdc:Perl]]
[[pl:Perl]]
[[pt:Perl]]
[[ro:Perl]]
[[ru:Perl]]
[[sah:Perl]]
[[sh:Perl]]
[[simple:Perl]]
[[sk:Perl]]
[[sl:Perl]]
[[sq:Perl]]
[[sr:Перл (програмски језик)]]
[[sv:Perl]]
[[ta:பெர்ள்]]
[[tg:Перл (забони барномасозӣ)]]
[[th:ภาษาเพิร์ล]]
[[tr:Perl]]
[[uk:Perl]]
[[ur:Perl]]
[[vi:Perl]]
[[zh:Perl]]
[[zh-min-nan:Perl]]