Perl: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Rotbot (discussione | contributi)
m Bot: sito web uguale a Wikidata
 
(32 versioni intermedie di 23 utenti non mostrate)
Riga 1:
{{nd}}
{{nota disambigua|titolo=Perl (Saarland)|descrizione=il comune tedesco nella [[Saarland]]}}
{{NN|informatica|marzo 2016|Presenti solo 2 note di conto}}
{{Linguaggio di programmazione
|nome = Perl
Riga 8 ⟶ 9:
|versione =
|utilizzo = general-purpose
|paradigmi = multi-paradigma: [[Programmazione funzionale|funzionale]], [[Programmazione imperativa|imperativo]], [[Programmazione orientata agli aspettioggetti|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 Lista di linguaggi influenzati dal linguaggio in esame6]], citare le fonti -->[[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 = httphttps://dev.perl.org/licenses | titolo = Perl Licensing | accesso=18 giugno 2012 | editore = dev.perl.org}}</ref>
|sito_web =
}}
[[File:Hello World Perl GTk2.png|thumbminiatura|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 italiano 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.
Riga 47 ⟶ 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.
Riga 81 ⟶ 82:
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.
 
== Programmi di esempio ==
=== 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 94 ⟶ 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 108 ⟶ 109:
print "$campo1,$campo2\n";
}
</syntaxhighlight>
</source>
 
In questo secondo caso notiamo come sia possibile scrivere lo stesso programma in un altro modo.
Riga 119 ⟶ 120:
 
== 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://conferences.yapceurope.org/ipw2009 |Italian Perl Workshop 2009]}}
* [http://www.perl.it/documenti/faq/list.html Perl FAQ]
* {{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.perlpm.it org|http://www.perlpm.it]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}}
Riga 151 ⟶ 156:
{{portale|informatica}}
 
[[Categoria:Perl|Perl ]]
[[Categoria:Linguaggi di scripting]]
 
[[ml:പേള്‍]]