V??rifi?? contenu

Perl

Sujets connexes: Programmation informatique

Saviez-vous ...

SOS croit que l'??ducation donne une meilleure chance dans la vie des enfants dans le monde en d??veloppement aussi. Un lien rapide pour le parrainage d'enfants est http://www.sponsor-a-child.org.uk/

Perl
Programming-republic-of-perl.png
Paradigm (s) Multi-paradigme
Paru dans 1987
Con??u par Larry Wall
Version stable 5.10.0 (18 D??cembre 2007 (2007-12-18))
Typing discipline Dynamique
Influenc?? par AWK, BASIC , BASIC-PLUS, C , C ++ , Lisp, Pascal, sed, Shell Unix
Influenc?? Python , PHP, Ruby, ECMAScript, Dao, Windows PowerShell
OS Multiplate-forme
Licence GNU General Public License, Artistic License
  • http://www.perl.org/

Dans la programmation informatique, Perl est un haut niveau, d'usage g??n??ral, interpr??t??, langage de programmation dynamique. Perl a ??t?? d??velopp?? par Larry Wall, linguiste travaillant comme administrateur de syst??mes pour la NASA , en 1987, comme un objectif g??n??ral Unix langage de script pour faire le traitement des rapports easier.Since puis, il a subi de nombreuses modifications et r??visions et est devenu tr??s populaire parmi les programmeurs. Larry Wall continue de superviser le d??veloppement de la langue de base, et de sa nouvelle version, Perl 6.

Perl emprunte caract??ristiques d'autres langages de programmation dont C , scripts shell ( sh), AWK, sed et Lisp. La langue offre de puissantes installations de traitement de texte sans arbitraires limites de longueur de donn??es, comme les nombreux outils Unix pr??sents ?? l'??poque, ce qui en fait la langue id??ale pour manipuler des fichiers texte. Il est ??galement utilis?? pour programmation graphique, l'administration du syst??me, programmation r??seau, applications qui n??cessitent un acc??s de base de donn??es et programmation CGI sur le Web . Perl est surnomm?? comme Tron??onneuse arm??e suisse des langages de programmation en raison de sa flexibilit?? et l'adaptabilit??.

Histoire

Larry Wall a commenc?? ?? travailler sur Perl en 1987, alors qu'il travaillait comme programmeur chez Unisys, et publi?? la version 1.0 ?? la comp.sources.misc newsgroup le 18 D??cembre, 1987. La langue est d??velopp??e rapidement au cours des prochaines ann??es. Perl 2, sorti en 1988, a pr??sent?? une meilleure moteur d'expressions r??guli??res. Perl 3, sorti en 1989, a ajout?? le support pour flux de donn??es binaires.

A l'origine la seule documentation pour Perl ??tait une seule (en plus longue) page de manuel. En 1991, Programmation perl (connu pour de nombreux programmeurs Perl comme le "Camel Book") a ??t?? publi??, et est devenu la r??f??rence de fait pour la langue. Dans le m??me temps, le num??ro de version de Perl a ??t?? heurt?? ?? 4, de ne pas marquer un changement majeur dans la langue, mais d'identifier la version qui a ??t?? document?? par le livre.

Perl 4 a connu une s??rie de versions de maintenance, aboutissant ?? Perl 4,036 en 1993. ?? ce moment, mur abandonn?? Perl 4 ?? commencer ?? travailler sur Perl 5.

Conception initiale de Perl 5 est poursuivie en 1994. Les perl5-porters liste de diffusion a ??t?? cr????e en mai 1994 pour coordonner le travail sur le portage de Perl 5 ?? diff??rentes plates-formes. Il reste le principal forum pour le d??veloppement, l'entretien, et le portage de Perl 5.

Perl 5 a ??t?? lib??r?? le 17 Octobre, 1994. Ce ??tait une r????criture presque compl??te de la interpr??te, et a ajout?? de nombreuses nouvelles fonctionnalit??s ?? la langue, y compris des objets, des r??f??rences, (mes) variables lexicales, et des modules. Surtout, modules fourni un m??canisme pour ??tendre la langue sans modifier l'interpr??te. Cela a permis ?? l'interpr??te de base se stabiliser, m??me si elle a permis programmeurs Perl ordinaires pour ajouter de nouvelles fonctionnalit??s de langage.

En 2008, Perl 5 est toujours activement maintenue. Les caract??ristiques importantes et de nouvelles constructions linguistiques essentielles ont ??t?? ajout??es le long du chemin, y compris Support de l'Unicode, fils, un meilleur support la programmation orient??e objet et de nombreuses autres am??liorations.

Le 18 D??cembre 2007, le 20e anniversaire de Perl 1.0, Perl 5.10.0 a ??t?? lib??r??. Perl 5.10.0 inclut de nouvelles fonctionnalit??s notables qui la rapprochent Perl 6, parmi eux un nouveau instruction switch (appel?? "donn??e / quand"), mises ?? jour des expressions r??guli??res, "l'op??rateur match intelligent" ~~, et plus encore.

Un des ??v??nements les plus importants dans l'histoire Perl 5 a eu lieu ?? l'ext??rieur de la langue ad??quate, et a ??t?? une cons??quence de son soutien de module. Sur 26 octobre 1995 , le Comprehensive Perl Archive Network (CPAN) a ??t?? cr???? en tant que r??f??rentiel pour Perl modules et Perl lui-m??me. Au moment de l'??criture, il transporte plus de 13 500 modules par plus de 6500 auteurs. CPAN est largement consid??r?? comme l'une des plus grandes forces de Perl dans la pratique.

Nom

Perl a ??t?? initialement nomm?? "Pearl", apr??s la Parabole de la perle de la Evangile de Matthieu. Larry Wall a voulu donner ?? la langue un nom court avec des connotations positives; il pr??tend qu'il consid??rait (et rejet??e) chaque mot trois et quatre lettres dans le dictionnaire. Il a ??galement consid??r?? le nommant apr??s que sa femme Gloria. A d??couvert le mur existant PEARL langage de programmation avant la sortie officielle de Perl et a chang?? l'orthographe du nom.

Le nom est normalement capitalis??s (Perl) en se r??f??rant ?? la langue et en minuscule (perl) pour d??signer le programme d'interpr??tation soi puisque les syst??mes de fichiers Unix sont sensibles ?? la casse. Avant la sortie de la premi??re ??dition de la programmation Perl, il ??tait courant de se r??f??rer ?? la langue que perl; Randal L. Schwartz, cependant, a capitalis?? le nom de la langue dans le livre pour faire ressortir mieux quand composer. Le cas distinction a ensuite ??t?? adopt?? par la communaut??.

Le nom est parfois donn?? comme "PERL" (pour extractions pratiques Rapport Language). Bien que l'expansion a pr??valu dans de nombreux manuels d'aujourd'hui, y compris le Perl officielle page de manuel, ce est simplement une backronym. Le nom ne r??siste pas officiellement pour rien, alors orthographe dans tous les bouchons est incorrect. La capitalisation ad??quate est consid??r?? comme un Shibboleth dans la communaut?? Perl. Plusieurs autres extensions ont ??t?? propos??es, y compris le propre humour Pathologiquement Eclectic Rubbish Lister de mur. En effet, Wall affirme que le nom ??tait destin?? ?? inspirer de nombreuses extensions diff??rentes.

Le symbole de chameau

Programmation Perl, publi?? par O'Reilly Media, dispose d'une image d'un chameau sur la couverture, et est commun??ment appel?? Le Camel Book. Cette image d'un chameau est devenu un symbole g??n??ral de Perl.

Ce est ??galement un pirate embl??me, apparaissant sur certaines T-shirts et autres articles vestimentaires.

O'Reilly poss??de l'image en tant que marque, mais pr??tend utiliser leurs droits l??gaux seulement pour prot??ger ??l'int??grit?? et l'impact de ce symbole". O'Reilly permet une utilisation non-commerciale du symbole, et fournit programmation R??publique de logos et Perl Propuls?? par touches Perl.

Vue d'ensemble

Perl est un langage de programmation g??n??raliste initialement d??velopp?? pour la manipulation de texte et maintenant utilis?? pour un large ??ventail de t??ches, y compris l'administration du syst??me, d??veloppement web, programmation r??seau, GUI d??veloppement, et plus encore.

La langue est destin?? ?? ??tre pratique (facile ?? utiliser, efficace, complet) plut??t que beau (petit, ??l??gant, minimaliste). Ses principales caract??ristiques incluent un support pour de multiples paradigmes de programmation ( de proc??dure, orient??e objet, et mod??les fonctionnels), comptage de r??f??rence gestion de la m??moire (sans garbage collector du cycle de d??tection), prise en charge int??gr??e pour le traitement de texte et une grande collection de tiers modules.

Selon Larry Wall, Perl a deux slogans. Le premier est "Il ya plus d'une fa??on de le faire", commun??ment appel?? TMTOWTDI et le second est "choses faciles doivent ??tre faciles et des choses dures devraient ??tre possibles".

Caract??ristiques

La structure g??n??rale de Perl d??rive largement de C. Perl est de nature proc??durale, avec variables, expressions, instructions d'affectation, d??limit??e par des accolades les blocs de code, structures de contr??le, et des sous-programmes.

Perl prend ??galement des fonctionnalit??s de la programmation du shell. Toutes les variables sont marqu??s avec de leader sceaux, qui identifient clairement le type de donn??es (scalaire, un tableau, hachage, etc.) de la variable dans le contexte. Surtout, sceaux permettent de variables ?? interpoler directement dans les cordes. Perl a de nombreuses fonctions int??gr??es qui fournissent des outils souvent utilis??s dans la programmation shell (bien que beaucoup de ces outils sont mis en ??uvre par des programmes externes ?? la coque) comme le tri, et en appelant sur les installations de syst??me.

Perl prend listes de Lisp, tableaux associatifs (hashes) de AWK, et expressions r??guli??res, de Sed. Ces simplifier et faciliter beaucoup l'analyse, le traitement de texte, et les t??ches de gestion de donn??es.

En Perl 5, fonctionnalit??s ont ??t?? ajout??es ce complexe de soutien structures de donn??es, fonctions de premi??re classe (c.-??- fermetures en tant que valeurs), et un mod??le de programmation orient??e objet. Il se agit notamment r??f??rences, paquets, bas??e sur la classe m??thode exp??dition, et les variables de port??e lexicale, avec directives de compilation (par exemple, le pragma strict). Une caract??ristique suppl??mentaire majeure introduite avec Perl 5 a ??t?? la capacit?? de conditionner le code sous forme de modules r??utilisables. Larry Wall a d??clar?? plus tard que ??L'ensemble intention du syst??me de module de Perl 5 ??tait d'encourager la croissance de la culture Perl plut??t que le noyau de Perl."

Toutes les versions de Perl font le typage des donn??es automatique et gestion de la m??moire. L'interpr??te conna??t les exigences de chaque objet de donn??es dans le programme de type et de stockage; il alloue et lib??re stockage pour eux comme n??cessaire ?? l'aide comptage de r??f??rence (de sorte qu'il ne peut pas d??sallouer structures de donn??es circulaires sans intervention manuelle). Juridiques conversions par exemple le type, les conversions ?? partir du num??ro de cha??ne-sont effectu??es automatiquement au moment de l'ex??cution; conversions de type ill??gales sont des erreurs fatales.

Conception

La conception de Perl peut ??tre comprise comme une r??ponse ?? trois grandes tendances dans l'industrie informatique: la baisse des co??ts de mat??riel, la hausse des co??ts du travail, et des am??liorations dans la technologie de compilateur. Beaucoup de langages informatiques ant??rieurs, tels que Fortran et C, ont ??t?? con??us pour faire un usage efficace de mat??riel informatique co??teux. En revanche, Perl est con??u pour une utilisation efficace des programmeurs informatiques co??teux.

Perl poss??de de nombreuses fonctionnalit??s qui facilitent la t??che du programmeur au d??triment des plus grandes exigences en mati??re de CPU et de m??moire. Il se agit notamment de gestion automatique de la m??moire; typage dynamique; cha??nes, les listes et les tables de hachage; expressions r??guli??res; introspection et une fonction eval ().

Mur a ??t?? form?? en tant que linguiste, et la conception de Perl est tr??s inform?? par des principes linguistiques. Des exemples comprennent Codage de Huffman (constructions communes doivent ??tre courts), bonne fin pond??ration (l'information importante devrait venir en premier), et une grande collection de primitifs linguistiques. Perl favorise constructions de langage concis et naturel pour l'homme ?? lire et ??crire, m??me se ils compliquent l'interpr??teur Perl.

Syntaxe Perl refl??te l'id??e que ??les choses qui sont diff??rentes devrait ??tre diff??rent". Par exemple, scalaires, les tableaux et les hachages ont leader diff??rente sceaux. indices de tableau et les cl??s de hachage utilisent diff??rents types d'accolades. Cordes et les expressions r??guli??res ont des s??parateurs standard. Cette approche peut ??tre compar??e avec les langues comme Lisp, o?? le m??me Construction S-expression et syntaxe de base est utilis?? ?? de nombreuses fins diff??rentes.

Perl ne applique pas tout paradigme de programmation particulier (proc??dure, orient?? objet, fonctionnelle, etc.) ou m??me exige le programmeur de choisir parmi eux.

Il existe un large pli?? pratique ?? la fois au langage Perl et la communaut?? et de la culture qui l'entourent. La pr??face ?? la programmation Perl commence, "Perl est un langage pour obtenir votre travail." Une cons??quence de ceci est que Perl ne est pas une langue bien rang??. Il comprend de nombreuses fonctionnalit??s, tol??re des exceptions ?? ses r??gles, et emploie heuristiques pour r??soudre les ambigu??t??s syntaxiques. En raison de la nature de pardon du compilateur, des bogues peuvent parfois ??tre difficiles ?? trouver. Discuter le comportement de variante de fonctions int??gr??es dans la liste et scalaires contextes, le perlfunc (1) page de manuel dit ??En g??n??ral, ils ne ce que vous voulez, sauf si vous voulez la coh??rence."

Perl a plusieurs devises qui v??hiculent les aspects de sa conception et de l'utilisation. Un est " Il ya plus d'une fa??on de le faire "(TIMTOWTDI, habituellement prononc???? Tim Toady ') autres sont. "Perl:. La tron??onneuse de la programmation de l'arm??e suisse Langues?? et ??Pas de limites inutiles" Un objectif de conception d??clar?? de Perl est ?? faire. t??ches faciles facile et t??ches difficiles possible. Perl a ??galement ??t?? appel?? "Le Duct Tape de l'Internet".

Il n'y a aucune sp??cification ??crite ou standard pour le langage Perl, et aucun plan pour cr??er un pour la version actuelle de Perl. Il n'y a eu une mise en ??uvre de l'interpr??te. Ce interpr??te, avec ses tests fonctionnels, se pr??sente comme une sp??cification de facto de la langue.

Applications

Perl a applications nombreuses et vari??es, aggrav??e par la disponibilit?? de nombreux modules standard et tiers.

Perl a ??t?? utilis?? depuis les premiers jours du Web pour ??crire scripts CGI. Il est connu comme l'un des "trois P" (avec Python et PHP), les langages dynamiques les plus populaires pour les applications Web. Ce est aussi une partie int??grante de la populaire LAMP pile de la solution pour le d??veloppement web. Les grands projets ??crits en Perl comprennent Slash, Bugzilla, TWiki et Movable Type. De nombreux sites Web ?? fort trafic, comme bbc.co.uk, Amazon.com, LiveJournal.com, Ticketmaster.com et IMDb.com utiliser intensivement Perl.

Perl est souvent utilis?? comme un la langue de colle, liant ensemble des syst??mes et des interfaces qui ne ont pas ??t?? sp??cifiquement con??us pour interop??rer et pour "les donn??es munging", ce est ?? dire, la conversion ou le traitement de grandes quantit??s de donn??es pour des t??ches comme la cr??ation de rapports. En fait, ces forces sont intimement li??s. La combinaison fait perl un outil tout usage populaire pour les administrateurs syst??me, en particulier les programmes sous forme de courtes peuvent ??tre saisis et ex??cut??s sur un seule ligne de commande.

Avec un degr?? de soin, code Perl peut ??tre portable sur Windows et Unix. Code Perl portable est souvent utilis?? par les fournisseurs de logiciels (deux COTS et sur mesure) pour simplifier l'emballage et l'entretien de la construction de logiciels et scripts de d??ploiement.

Interfaces utilisateur graphiques (GUI) peuvent ??tre d??velopp??s en utilisant Perl. En particulier, Perl / Tk est couramment utilis?? pour permettre l'interaction de l'utilisateur avec des scripts Perl. Cette interaction peut ??tre synchrone ou asynchrone en utilisant les rappels de mettre ?? jour l'interface graphique. Pour plus d'informations sur les technologies impliqu??es voir Tk, Tcl et WxPerl.

Perl est ??galement largement utilis?? dans la finance et la bio-informatique , o?? il est appr??ci?? pour le d??veloppement rapide d'applications et le d??ploiement, et la capacit?? ?? g??rer de grands ensembles de donn??es.

Ex??cution

Perl est impl??ment?? comme un interpr??te de base, ??crit en C, avec une grande collection de modules, ??crit en Perl et C. La distribution source est, ?? partir de 2005, 12 MB lorsqu'il est emball?? dans un fichier tar et compress??. L'interpr??te est 150 000 lignes de code C et compile ?? un ex??cutable de 1 Mo sur les architectures typiques de la machine. Alternativement, l'interpr??te peut ??tre compil?? pour une biblioth??que de lien et int??gr?? dans d'autres programmes. Il ya pr??s de 500 modules dans la distribution, comprenant 200 000 lignes de Perl et un 350 000 lignes suppl??mentaires de code C. (Une grande partie du code C dans les modules se compose de tables de codage de caract??res.)

L'interpr??te a une architecture orient??e objet. Tous les ??l??ments de langage Perl les scalaires, les tableaux, tables de hachage, coderefs, descripteurs de fichier-sont repr??sent??s dans l'interpr??teur par des structures C. Les op??rations sur ces structures sont d??finies par une grande collection de macros, typedefs et fonctions; ceux-ci constituent l'API Perl C. L'API Perl peut ??tre d??routant pour les non initi??s, mais ses points d'entr??e suivre un sch??ma de nommage coh??rent, qui fournit des conseils ?? ceux qui l'utilisent.

L'ex??cution d'un programme Perl divise grosso modo en deux phases: lors de la compilation et de l'ex??cution. Au moment de la compilation, l'interpr??te analyse le texte du programme dans un arbre de syntaxe. Au moment de l'ex??cution, il ex??cute le programme en marchant l'arbre. Le texte est analys?? qu'une seule fois, et l'arbre de syntaxe est soumise ?? l'optimisation avant son ex??cution, de sorte que la phase d'ex??cution est relativement efficace. Optimisations de compilation sur l'arbre de syntaxe comprennent pliage constante et la propagation de contexte, mais optimisation de judas est ??galement effectu??e. Cependant, lors de la compilation et de l'ex??cution des phases peuvent nid: BEGIN blocs de code ex??cutent au moment de la compilation, tandis que le eval fonction lance la compilation en cours d'ex??cution. Ces deux op??rations font implicitement partie d'un certain nombre d'autres-notamment, l' use clause qui charge les biblioth??ques, connu en tant que modules Perl, implique un BEGIN bloc.

Perl a une contextuelle grammaire qui peut ??tre affect??e par code ex??cut?? lors d'une phase d'ex??cution intermittente. Par cons??quent Perl ne peut pas ??tre analys?? par une ligne droite Lex / Yacc lexer / de combinaison de l'analyseur. Au lieu de cela, l'interpr??te met en ??uvre sa propre lexer, qui coordonne avec un modifi??e GNU analyseur bison pour r??soudre les ambigu??t??s de la langue. Il est dit que ??seul perl peut analyser Perl", ce qui signifie que seul l' interpr??teur Perl (Perl) peut analyser le langage Perl (Perl). La v??rit?? de ce est attest??e par les imperfections persistantes d'autres programmes qui se engagent ?? analyser Perl, comme les analyseurs de code source et auto-p??n??trateurs, qui doivent composer non seulement avec les nombreuses fa??ons d'exprimer des constructions syntaxiques sans ambigu??t??, mais aussi le fait que Perl ne peut pas ??tre analys?? dans le cas g??n??ral sans l'ex??cuter. Bien r??ussi ?? cr??er un analyseur Perl ?? des fins li??es aux documents, le projet PPI a d??termin?? que l'analyse de code Perl comme un document (en conservant son int??grit??) et comme code ex??cutable simultan??ment ??tait, en effet, pas possible. Plus pr??cis??ment l'auteur a affirm?? que, "analyse Perl souffre de la ' Probl??me de l'arr??t. "

Perl est distribu?? avec quelques 120 000 tests fonctionnels. Celles-ci passent dans le cadre du processus de construction normale, et exercent intensivement l'interpr??te et ses modules de base. D??veloppeurs Perl se appuient sur les tests fonctionnels pour se assurer que les changements ?? l'interpr??te ne introduisent pas de bogues; inversement, les utilisateurs de Perl qui voient l'interpr??te passer ses tests fonctionnels sur leur syst??me peuvent avoir un haut degr?? de confiance qu'il fonctionne correctement.

Maintien de l'interpr??teur Perl est devenu de plus en plus difficile au cours des ann??es. Le code de base est en d??veloppement continu depuis 1994. Le code a ??t?? optimis?? pour les performances au d??triment de la simplicit??, de clart?? et de fortes interfaces internes. De nouvelles fonctionnalit??s ont ??t?? ajout??es, mais la compatibilit?? ascendante pratiquement compl??te avec les versions ant??rieures est maintenue. La taille et la complexit?? de l'interpr??te est un obstacle pour les d??veloppeurs qui souhaitent travailler.

Disponibilit??

Perl est logiciel libre, et est autoris?? en vertu de la Licence artistique et le GNU Public License. G??n??ral distributions sont disponibles pour la plupart syst??mes d'exploitation. Elle est particuli??rement r??pandue sur Unix et Syst??mes de type Unix, mais il a ??t?? port?? ?? la plupart des plates-formes modernes (et beaucoup obsol??tes). Avec seulement six ont signal?? exceptions, Perl peut ??tre compil?? ?? partir code source sur tous les Unix-like, Plates-formes POSIX ou autrement compatibles Unix. Cependant, ce est rarement n??cessaire, car Perl est inclus dans l'installation par d??faut de nombreux syst??mes d'exploitation populaires.

En raison de changements inhabituels n??cessaires ?? la Environnement Classic Mac OS, un port sp??cial appel?? MacPerl a ??t?? exp??di?? de fa??on ind??pendante.

Le CPAN porte une liste compl??te des plates-formes support??es avec des liens vers les distributions disponibles sur chaque.

Fen??tres

Les utilisateurs de Microsoft Windows installent g??n??ralement l'une des distributions binaires natifs de Perl pour Win32, le plus souvent ActivePerl. Compilation de Perl code source sous Windows est possible, mais la plupart des installations ne ont pas le compilateur C n??cessaires et de construire des outils. Cela rend ??galement difficile d'installer des modules du CPAN, en particulier ceux qui sont partiellement ??crit en C.

Les utilisateurs de la distribution binaire ActivePerl sont donc d??pendants des modules fournis dans reconditionn??s Module r??f??rentiel de ActiveState, qui sont pr??compil??s et peut ??tre install?? avec PPM. Les ressources limit??es pour maintenir ce d??p??t ont ??t?? cause de divers probl??mes de longue date.

Pour rem??dier ?? cela et d'autres probl??mes de Perl sur la plate-forme Windows, win32.perl.org a ??t?? lanc?? par Adam Kennedy au nom de La Fondation Perl en Juin 2006. Ce est un site communautaire pour "toutes choses Windows et Perl." Un objectif majeur de ce projet est de fournir des distributions Perl alternatives production-qualit?? qui incluent un compilateur C embarqu?? et construire des outils, afin de permettre aux utilisateurs de Windows d'installer des modules directement ?? partir du CPAN. La distribution de production de la famille est appel??e Strawberry Perl, avec la recherche et le travail exp??rimental fait dans un connexes R??partition Vanilla Perl.

Une autre fa??on populaire de courir Perl sous Windows est fourni par le Cygwin couche d'??mulation. Cygwin fournit un environnement de type Unix sur Windows et les deux perl et cpan sont facilement disponibles sous forme de paquets pr??-compil??s standard dans le programme d'installation de Cygwin. Depuis Cygwin comprend ??galement la gcc, la compilation de la source Perl est ??galement possible.

Structure de la langue

En Perl, le minimum Bonjour programme mondial peut ??tre ??crit comme suit:

 print "Bonjour, monde! \ n"

Cette imprime le cha??ne Bonjour, monde! et un saut de ligne, symboliquement exprim?? par un n caract??re dont l'interpr??tation est modifi?? par la pr??c??dente caract??re d'??chappement (une barre oblique inverse).

La forme canonique du programme est l??g??rement plus prolixe:

 #! / Usr / bin / perl
 print "Bonjour tout le monde! \ n";

Le caract??re di??se introduit une commenter en Perl, qui se ??tend jusqu'?? la fin de la ligne de code et est ignor?? par le compilateur. Le commentaire utilis?? ici est d'un genre particulier: il a appel?? le ligne tralala. Cela indique les syst??mes d'exploitation Unix-like o?? trouver l'interpr??teur Perl, ce qui permet d'invoquer le programme sans mentionner explicitement perl . (Notez que sur Microsoft Windows des syst??mes, des programmes Perl sont g??n??ralement invoqu?? en associant le .pl l'extension avec l'interpr??teur Perl. Afin de faire face ?? de telles circonstances, perl d??tecte la ligne shebang et analyse pour les commutateurs, de sorte qu'il ne est pas strictement vrai que la ligne de shebang est ignor??e par le compilateur.)

La deuxi??me ligne de la forme canonique comprend un point-virgule, qui est utilis??e pour s??parer des ??tats en Perl. Avec seulement une seule instruction dans un bloc ou un fichier, un s??parateur ne est pas n??cessaire, il peut ??tre omis de la forme minimale du programme ou plus g??n??ralement de la d??claration finale dans ne importe quel bloc ou fichier. La forme canonique comprend parce qu'il est commun de mettre fin ?? toute d??claration, m??me quand il ne est pas n??cessaire de le faire, car cela rend plus facile l'??dition: code peut ??tre ajout?? ou ??loign?? de la fin d'un bloc ou d'un fichier sans avoir ?? ajuster des points-virgules.

Version 5.10 de Perl introduit un say fonction qui ajoute implicitement un caract??re de nouvelle ligne ?? sa sortie, rendant le "Bonjour tout le monde" programme minimal encore plus court:

 dire ??Bonjour tout le monde! '

Les types de donn??es

Perl a un certain nombre de droits fondamentaux types de donn??es, les plus couramment utilis??s et discut??s ??tre: scalaires, tableaux, hash, handles de fichiers et sous-programmes:

  • Un scalaire est une valeur unique; il peut ??tre un nombre, une cha??ne ou une r??f??rence
  • Une tableau est une collection ordonn??e des scalaires
  • Un hachage, ou tableau associatif, est une carte ?? partir de cha??nes ?? scalaires; les cordes sont appel??s les touches et les scalaires sont appel??s valeurs.
  • Un descripteur de fichier est une carte ?? un fichier, un p??riph??rique ou un tuyau qui est ouvert pour la lecture, l'??criture, ou les deux.
  • Un sous-programme est un morceau de code qui peuvent ??tre transmis arguments, ??tre ex??cut??e, et renvoyer des donn??es

La plupart des variables sont marqu??es par un chef de file sceau, qui identifie le type de donn??es en cours d'acc??s (pas le type de la variable elle-m??me), ?? l'exception des handles de fichiers, qui ne ont pas un sceau. Le m??me nom peut ??tre utilis?? pour les variables de diff??rents types de donn??es, sans conflit.

 Foo $ # un scalaire
 foo # un tableau
 % Foo # un hachage
 FOO # un descripteur de fichier
 & # FOO une constante (mais le & est facultatif)
 & # Foo un sous-programme (mais le & est optionnel)

poign??es de fichiers et constantes ne doivent pas ??tre en majuscules, mais ce est une convention commune du fait qu'il n'y a pas sceau pour les d??signer. Les deux sont de port??e mondiale, mais descripteurs de fichiers sont interchangeables avec des r??f??rences aux handles de fichiers qui peuvent ??tre stock??s dans des scalaires, qui ?? son tour permis port??e lexicale. Faire est encourag??e dans Perl Best Practices de Damian Conway. Par commodit??, l' open fonction dans Perl 5.6 et plus r??cent sera autovivify scalaires d??finis de d??poser r??f??rences de poign??e.

Les chiffres sont ??crites sous la forme nue; cha??nes sont entour??es de citations de divers types.

 $ Name = "joe";
 $ Color = 'red';
 
 Nombre1 $ = 42;
 number2 de $ '42' =;
 
 # Ce est ??valu??e ?? vrai
 si (nombre1 $ == $ nombre2) {print "Les chiffres et les cha??nes de chiffres sont les m??mes!";}
 
 $ Reponse = "La r??ponse est $ number1"; # interpolation variable: La r??ponse est 42
 $ Prix = 'Cet appareil co??te $ 42'; # Aucune interpolation apostrophes
 
 $ Album = "Ce est la \ de David Bowie" Heroes \ ""; # citations litt??rales ?? l'int??rieur d'une cha??ne;
 $ Album = 'C \' David Bowie l \ 's "Heroes"'; # m??me que ci-dessus avec des guillemets simples;
 $ Album = q ('s David Bowie' s "Heroes" Il); # la citation comme op??rateurs q () et qq () permettent
  # Presque ne importe quel d??limiteur au lieu de citations, ??
  # ??viter backslashing excessive
 
 Multilined_string $ = <  
 

Perl convertir des cha??nes en nombres et vice versa en fonction du contexte dans lequel ils sont utilis??s. Dans l'exemple suivant l'$ cordes n et m $ sont trait??s comme des num??ros quand ils sont les arguments ?? l'op??rateur d'addition. Ce code imprime le nombre ??5??, la suppression des informations non num??rique pour l'op??ration, bien que les valeurs des variables demeurent les m??mes. (L'op??rateur de concat??nation est la p??riode, pas le + symbole.)

 $ N = "3 pommes??;
 m $ = '2 oranges ??;
 print $ n + m $;

Perl dispose ??galement d'un contexte bool??en qu'il utilise dans l'??valuation des instructions conditionnelles. Les valeurs suivantes tous les ??valuent comme faux en Perl:

 $ False = 0; # le nombre z??ro
 $ False = 0,0; # le nombre z??ro comme un flotteur
 $ False = 0b0; # le nombre z??ro en binaire
 $ False = 0x0; # le nombre z??ro en hexad??cimal
 $ false = '0'; # la cha??ne z??ro
 $ False = ""; # la cha??ne vide
 $ False = undef; # la valeur de retour du FNUD

Toutes les autres valeurs sont ??valu??es ?? true. Cela comprend l'auto-description cha??ne litt??rale impair de "0 but true", qui est en fait 0 comme un nombre, mais vrai lorsqu'il est utilis?? comme un bool??en. (Toute cha??ne non num??rique aurait ??galement cette propri??t??, mais cette cha??ne particuli??re est ignor?? par Perl par rapport aux avertissements num??riques.) Une version moins explicite mais plus conceptuellement portable de cette cha??ne est '0E0' ou '0E0', qui ne est pas compter sur les personnages ??tant ??valu?? comme 0, comme '0E0' est litt??ralement "z??ro fois dix ?? la puissance de z??ro."

Expressions bool??ennes ??valu??es retournent ??galement des valeurs scalaires. Bien que la documentation qui ne promet pas particuli??rement vrai ou faux est renvoy?? (et ne peuvent donc pas ??tre invoqu??), de nombreux op??rateurs bool??ens retour 1 pour vrai et le vide-cha??ne pour fausse (qui ??value ?? z??ro dans un contexte num??rique). La fonction d??finie () indique si la variable a un ensemble de valeur. Dans les exemples ci-dessus d??finies ($ false) est vraie pour toutes les valeurs sauf undef.

Si un r??sultat sp??cifiquement 1 ou 0 (comme en C) est n??cessaire, une conversion explicite est consid??r?? par certains auteurs ?? ??tre n??cessaire:

 my $ REAL_RESULT = $ boolean_result 1: 0;

Cependant, se il est connu que la valeur est 1 ou undef, une conversion implicite peut ??tre utilis?? ?? la place:

 my $ REAL_RESULT = $ boolean_result + 0;

Une liste est ??crit en ??num??rant ses ??l??ments, s??par??s par des virgules, et entour?? par des parenth??ses si requis par la priorit?? des op??rateurs.

 scores = (32, 45, 16, 5);

Il peut ??tre ??crit de nombreuses autres mani??res, certains simples et d'autres moins:

 # Une fa??on explicite et directe
 scores = ('32', '45', '16', '5');
 
 # ??quivalent ?? ce qui pr??c??de, mais le qw () op??rateur de devis comme sauve typage des
 # citations et les virgules et r??duit l'encombrement visuel;  presque ne importe quel d??limiteur peut ??tre
 # Utilis??e au lieu de parenth??ses
 scores = qw (32 45 16 5);
 
 # La fonction split retourne une liste de cha??nes, qui sont extraites
 # ?? partir de l'expression en utilisant un mod??le de regex.
 # Cela peut ??tre utile pour la lecture d'un fichier de valeurs s??par??es par des virgules (CSV)
 scores = split /, /, '32, 45,16,5 ';
 
 # Il est ??galement possible d'utiliser un postfix pour l'op??rateur et d'aliasing
 # $ _ La magie variable ?? la valeur suivante de la liste lors de chaque
 # It??ration;  ce est inutile ici, mais idiomes similaires sont largement utilis??s
 # Dans certaines circonstances.
 pousserscores, foreach $ _ 32, 45, 16, 5;

Un hachage peut ??tre initialis?? ?? partir d'une liste de paires cl?? / valeur:

 % Pr??f??r?? = (
  joe => ??rouge??,
  sam => 'blue'
 );

Le => op??rateur ??quivaut ?? une virgule, sauf qu'il assume les guillemets autour du jeton pr??c??dent, si elle est un identificateur nue: (joe => 'red') est le m??me que ('joe' => 'red') . Il peut donc ??tre utilis?? pour elide guillemets, l'am??lioration de la lisibilit??.

Les diff??rents ??l??ments d'une liste sont accessibles en fournissant un index num??rique, entre crochets. Les valeurs individuelles dans un hachage sont accessibles en fournissant la touche correspondante, entre accolades. Le $ sceau identifie l'??l??ment accessible comme un scalaire.

 $ scores [2] # un ??l??ment descores
 $ Pr??f??r??e {} # joe une valeur en% pr??f??r??e

Ainsi, un hachage peut ??galement ??tre sp??cifi?? par l'??tablissement de ses touches individuellement:

 {$ Pr??f??r??e joe} = 'red';
 {$ Pr??f??r??e sam} = 'blue';

Plusieurs ??l??ments peuvent ??tre accessibles en utilisant le @ sceau place (identifiant le r??sultat sous forme de liste).

 scores [2, 3, 1] # trois ??l??ments descores
 favorite {'joe', 'Sam'} # deux valeurs en% pr??f??r??e
 favorite {qw (joe sam)} # m??me que ci-dessus

Le nombre d'??l??ments dans un tableau peut ??tre obtenue en ??valuant le tableau dans un contexte scalaire ou avec l'aide de l' $# sceau. Ce dernier donne l'indice du dernier ??l??ment du tableau, et non le nombre d'??l??ments. Remarque: le la coloration syntaxique dans le logiciel de Wikipedia consid??re ?? tort comme une partie du code ci-dessous pour faire partie des commentaires.

 $ Count =friends; # Affectation ?? un contexte scalaire des forces scalaire
 
 # $ amis; # L'indice du dernier ??l??ment dansfriends
 # $ Amis + 1; # Habituellement, le nombre d'??l??ments dans unefriends est plus
  # De $ # amis parce que le premier ??l??ment est ?? l'indice 0,
  # Pas une, ?? moins que le programmeur r??initialiser cette ?? un autre
  # Valeur, qui d??couragent la plupart des manuels de Perl.

Il ya quelques fonctions qui op??rent sur des hashs enti??res.

 names = keys% carnet d'adresses;
 addresses = valeurs% carnet d'adresses;
 
 # Chaque appel ?? chacun renvoie la paire cl?? / valeur suivante.
 # Toutes les valeurs seront ??ventuellement retourn??s, mais leur ordre
 # Ne peut pas ??tre pr??dit.
 while (($ nom, $ address) = chaque carnet d'adresses de%) {
  print "$ nom vit ?? l'adresse $ \ n";
 }
 
 # Comme ci-dessus, mais par ordre alphab??tique
 foreach my $ next_name (cl??s de tri% carnet d'adresses) {
  print "$ next_name vit au carnet d'adresses $ {$ next_name} \ n";
 }

Les structures de contr??le

Perl dispose de plusieurs types de structures de contr??le.

Il poss??de des structures de contr??le orient??s blocs, similaires ?? celles de la C, Javascript et Java langages de programmation. Conditions sont entour??s par des parenth??ses, et des blocs contr??l??s sont entour??s par des accolades:

 ??tiquette tout (cond) {...}
 ??tiquette tout (cond) {...} continue {...}
 ??tiqueter pour (init-expr; cond-expr; incr-expr) {...}
 var ??tiquette foreach (liste) {...}
 var ??tiquette foreach (liste) {...} continue {...}
 if (cond) {...}
 if (cond) {...} else {...}
 if (cond) {...} elsif (cond) {...} else {...}

O?? une seule d??claration est contr??l??e, modificateurs des ??tats fournissent une syntaxe plus concise:

 d??claration if cond;
 d??claration ?? moins cond;
 d??claration tout cond;
 d??claration jusqu'?? ce cond;
 liste foreach de d??claration;

Court-circuit op??rateurs logiques sont couramment utilis??s pour affecter le flux de contr??le au niveau de l'expression:

 expr et expr
 expr && expr
 expr ou expr
 expr || expr

(La "et" et "ou" op??rateurs sont similaires ?? && et || mais ont inf??rieure priorit??, ce qui rend plus facile de les utiliser pour contr??ler les ??tats entiers.)

Les mots-cl??s de contr??le de flux next (correspondant ?? C de continue ), last (correspondant ?? C de break ), return , et redo sont des expressions, de sorte qu'ils peuvent ??tre utilis??s avec les op??rateurs de court-circuit.

Perl poss??de ??galement deux structures de boucle implicites, dont chacune a deux formes:

 R??sultats = grep {...} liste
 R??sultats = expr grep, liste
 R??sultats = map {...} liste
 R??sultats = expr carte, liste

grep renvoie tous les ??l??ments de la liste pour laquelle le canton contr??l?? ou l'expression est ??valu??e ?? true. map ??value le canton contr??l?? ou une expression pour chaque ??l??ment de la liste et retourne une liste des valeurs r??sultantes. Ces constructions permettent simple style de programmation fonctionnelle.

Jusqu'?? la lib??ration 5.10.0, il n'y avait pas instruction switch en Perl 5. De 5.10.0 partir, une d??claration de branche multi-way appel?? given / when est disponible, qui prend la forme suivante:

donné (expr) {quand (cond) {...} default {...}}

Syntaxiquement, cette structure se comporte de façon similaire à basculer de trouver dans d'autres langues déclaration, mais avec quelques différences importantes. Le plus important est que, contrairement aux structures switch / cas, étant donné / lorsque les états cassent exécution après la première branche de succès, plutôt que d'attendre pour les commandes de rupture explicitement définies. Inversement, continue explicite sont la place nécessaire pour émuler le comportement de commutation.

Pour ceux qui ne l'aide de la version 5.10.0, la documentation Perl décrit une demi-douzaine de façons d'atteindre le même effet en utilisant d'autres structures de contrôle. Il existe ??galement un Commutateur module, qui fournit des fonctionnalités sur le modèle de la prochaine Perl 6 re-conception. Il est mis en ??uvre en utilisant un filtre source, son utilisation est déconseillée officieusement.

Perl comprend une étiquette goto déclaration, mais il est rarement utilisé. Situations où un aller à est appelé dans d'autres langues ne se produisent pas aussi souvent en Perl en raison de l'étendue de ses options de contrôle de flux.

Il ya aussi une goto et sous déclaration qui effectue un appel de queue. Il met fin à la sous-routine actuelle et appelle immédiatement le spécifié sous . Il est utilisé dans les situations où un appelant peut effectuer plus efficace la gestion de la pile que Perl lui-même (généralement parce qu'aucun changement à la pile actuelle est requise), et la récursivité profonde queue appelant peut avoir un impact positif important sur ??????les performances car il évite la surcharge de portée / empiler gestion sur le retour.

Les sous-programmes

Les sous-programmes sont définis avec le sous mot-clé, et invoquée tout simplement en les nommant. Si le sous-programme en question n'a pas encore été déclarée, l'invocation nécessite soit des parenthèses après le nom de la fonction ou une esperluette ( & ) devant elle. Mais l'aide et sans parenthèses passera aussi implicitement les arguments de la sous-routine actuelle de celui qui est appelé, et l'utilisation et avec des parenthèses contournera prototypes.

# Appeler un sous-
 
# parenthèses sont requises ici si le sous-programme est défini plus tard dans le codefoo() ;
& foo ; # (Ceci fonctionne également, mais a d'autres conséquences sur les arguments passés au sous-programme)
 
# Définir un sous-programme
sousfoo{ .. . }foo; # Voici parenthèses ne sont pas nécessaires

Une liste d'arguments peut être fournie après le nom du sous-programme. Les arguments peuvent être des scalaires, des listes ou des hashs.

foo$ x , @ y , z% ;

Les paramètres à un sous-programme ne doivent être déclarées que soit nombre ou le type; en fait, ils peuvent varier d'un appel à. Toute la validation des paramètres doit être effectuée de manière explicite dans la routine.

Les tableaux sont étendus à leurs éléments, hashes sont étendues à une liste de paires clé / valeur, et l'ensemble du lot est passé dans le sous-programme comme une seule liste de scalaires.

Quels que soient les arguments sont passés sont disponibles pour la sous-routine dans le tableau spécial _ . Les éléments de _ sont alias aux arguments réels; changer un élément de _ changement de l'argument correspondant.

Éléments de_peuvent être par les indices de la façon habituelle.

$ _ [ 0 ] , $ _ [ 1 ]

Toutefois, le code résultant peut être difficile à lire, et les paramètres ontpasser par référence sémantique, qui peuvent être indésirables.

Un idiome commun consiste à attribuer_à une liste de variables nommées.

 mon ( $ x , $ y , z $ ) = _ ;

Cela donne les noms de paramètres mnémoniques et met en ??uvre la sémantique passer par valeur. Le mon mot-clé indique que les variables suivantes sont portée lexicale au bloc contenant.

Un autre idiome est de déplacer hors de paramètres _ . Cela est particulièrement vrai lorsque le sous-programme prend un seul argument, ou pour la manipulation de l' $ Self argument en modules orientés objet.

ma $ x = shift ;

Les sous-programmes peuvent attribuer _ à un hachage pour simuler les arguments nommés; ce qui est recommandé dans Perl Best Practices pour les sous-programmes qui sont susceptibles d'avoir jamais plus de trois paramètres.

sousfunction1{
 mes % args = _ ;
 impression "'x' argument était '$ args {x}"\\ n" ;
 }function1(x=> 23 ) ;

Les sous-programmes peuvent renvoyer des valeurs.

retour 42 , $ x , @ y , z% ;

Si le sous-programme ne quitte pas via une retour déclaration, puis elle retourne la dernière expression évaluée dans le corps de la routine. Les tableaux et les hashs de la valeur de retour sont étendues à des listes de scalaires, comme ils le sont pour les arguments.

L'expression retournée est évaluée dans le contexte de l'appel du sous-programme; cela peut surprendre les imprudents.

sousla liste{( 4 , 5 , 6 )}
soustableau{ x = ( 4 , 5 , 6 ) ; x }
 
$ x =liste; # renvoie 6 - dernier élément de la liste
$ x =tableau; # rendements 3 - nombre d'éléments dans la liste
x =liste; # renvoie (4, 5, 6)
x =tableau; # renvoie (4, 5, 6)

Un sous-programme peut découvrir son contexte d'appel à lawantarrayfonction.

soussoit{
 retour wantarray ? ( 1 , 2 ) : «Oranges» ;
 }
 
$ x =soit; # retours "Oranges"
x =soit; # renvoie (1, 2)

Expressions régulières

Le langage Perl comprend une syntaxe spécialisée pour écrire des expressions régulières (RE, ou des expressions rationnelles), et l'interprète contient un moteur de recherche des chaînes d'expressions régulières. Le moteur d'expression régulière utilise un algorithme de retour en arrière, l'extension de ses capacités, de la simple correspondance de motif à la capture et à la substitution de chaîne. Le moteur d'expressions régulières est dérivé de regex écrits par Henry Spencer.

La syntaxe d'expression régulière Perl a été prise à partir d'UNIX Version 8 des expressions régulières. Cependant, il a divergé avant la première version de Perl, et a depuis grandi pour inclure beaucoup plus de fonctionnalités. Autres langues et des applications sont en train d'adopter des expressions régulières compatibles Perl plus des expressions régulières POSIX, y compris PHP, Ruby, Java , Microsoft .NET Framework et le serveur HTTP Apache.

Syntaxe d'expression régulière est extrêmement compact, en raison de l'histoire. Les premiers dialectes d'expressions régulières ne sont que légèrement plus expressive que globs, et la syntaxe a été conçu de telle sorte que l'expression ressemblerait le texte il correspond. Cela signifiait en utilisant rien de plus qu'un caractère de ponctuation simple ou une paire de caractères de délimitation pour exprimer les quelques affirmations soutenues. Au fil du temps, l'expressivité des expressions régulières a augmenté énormément, mais la conception de syntaxe n'a jamais été révisée et continue de compter sur la ponctuation. En conséquence, les expressions régulières peuvent être cryptique et extrêmement dense.

Utilisations

Le m // (match) opérateur introduit une expression régulière. (Si elle est délimitée par des barres obliques, comme dans tous les exemples ici, le leader m peut être omise par souci de concision. Si le m est présent, comme dans tous les exemples suivants, d'autres séparateurs peuvent être utilisés à la place des barres obliques.) Dans le plus simple cas, une expression comme

$ X = ~ m /abc/

évalue à truesi et seulement si la chaîne$ Xcorrespond à l'expression régulièreabc.

Les ///(substitut) opérateur, d'autre part, spécifie une recherche et opération de remplacement:

$ X = ~ s / abc / ABC / ; # upcase la b

Une autre utilisation des expressions régulières est de spécifier des séparateurs pour laDiviséfonction:

mots = scission m /, / , $ line ;

La Divisé fonction crée une liste des parties de la chaîne séparés par des matches de l'expression régulière. Dans cet exemple, une ligne est divisée en une liste de ses parties séparées par des virgules, et cette liste est ensuite affecté au mots tableau.

Syntaxe

Parties d'une expression régulière peut être entre parenthèses; parties correspondantes d'une chaîne de correspondance sont capturées . Chaînes capturées sont affectés à la séquentielle variables intégrées 1 $, 2 $, 3 $, ... , et une liste de chaînes capturées est retourné comme la valeur du match.

$ X = ~ (.) m / a c / ; # capturer le caractère entre «a» et «c»

Expressions régulières Perl peuvent prendre modificateurs . Ce sont des suffixes une seule lettre qui modifient le sens de l'expression:

$ X = ~ m / abc / i ; # insensible à la casse correspondance de motif
$ x = ~ s / abc / ABC / g ; # recherche globale et remplacer

Depuis les expressions régulières peuvent être dense et énigmatique à cause de leur syntaxe compacte, le / X modificateur a été ajouté en Perl pour aider les programmeurs écrivent des expressions régulières plus lisibles. Il permet aux programmeurs de placer espaces et des commentaires à l'intérieur des expressions régulières:

$ X = ~ m /a# reconnaît 'a'
 . # suivi d'un caractèrec#, puis suivi par le 'c'character
 /x;

interfaces de base de données

Perl est largement favorisé pour les applications de base de données. Ses installations de manutention du texte sont utiles pour générer des requêtes SQL; tableaux, hashes et la gestion automatique de la mémoire, il est facile de recueillir et de traiter les données renvoyées.

Dans les premières versions de Perl, interfaces de base de données ont été créés par re-lier l'interprète avec une bibliothèque de base de données côté client. Ce fut assez difficile qu'il n'a été fait que pour quelques-unes des bases de données les plus importantes et les plus utilisées, et a restreint le résultant perl exécutable en utilisant une seule interface de base de données à la fois.

En Perl 5, interfaces de base de données sont mises en ??uvre par les modules Perl DBI. Le (Database Interface) module DBI présente une interface unique, base de données indépendante pour les applications Perl, tandis que le DBD (Database Driver) modules gèrent les détails de l'accès à quelque 50 bases de données différentes; il ya des pilotes DBD pour la plupart des ANSI bases de données SQL.

DBI fournit la mise en cache pour les poignées et les requêtes de base de données, ce qui peut grandement améliorer les performances dans des environnements d'exécution longue durée de vie tels quemod_perl, aider les systèmes à haut volume détournent pointes de charge comme dans l'effet Slashdot.

Performance comparative

L'ordinateur de compétence linguistique Jeu comparer la performance des implémentations de problèmes de programmation typiques dans plusieurs langages de programmation. Les implémentations Perl présentés étaient généralement vers le haut de gamme du spectre de l'utilisation de la mémoire, et a eu des résultats de vitesse variées. La performance de Perl dans le jeu de repères est similaire à d'autres langages interprétés tels que Python, plus rapide que PHP, et nettement plus rapide que Ruby, mais plus lentement que la plupart des langues compilés.

Programmes Perl peuvent commencer plus lentement que des programmes similaires dans les langages compilés parce perl doit compiler le code source à chaque fois qu'il est exécuté. Dans un discours à l' YAPC :: Europe conférence de 2005 et de l'article suivant, "Un nouveau départ en temps opportun», Jean-Louis Leroy a constaté que ses programmes Perl ont pris beaucoup plus de temps à courir que prévu parce que l'interprète perl a passé beaucoup de temps à trouver parce que les modules de sa plus-grand chemin d'inclusion. Parce pré-compilation est toujours une partie expérimentale de Perl-contrairement à celle de Java, Python, et les programmes Ruby-Perl payer cette pénalité en tête à chaque exécution. Quand amortis sur une phase de long terme, le temps de démarrage est généralement pas importante, mais la mesure de très de courtes durées d'exécution peuvent souvent être faussés comme cela est souvent trouvé dans les benchmarks.

Un certain nombre d'outils ont été mis en place pour améliorer cette situation, dont la première a été d'Apachela mod_perl, qui a cherché à répondre à l'une des raisons les plus courantes que les programmes de petits Perl ont été invoquées rapidement:CGIWeb. développementActivePerl, via MicrosoftISAPI offre des performances similaires améliorations.

Une fois le code Perl est compilé, il ya une charge supplémentaire au cours de la phase d'exécution qui est généralement absente des programmes écrits dans des langages compilés comme C ou C ++, y compris, entre autres choses, les frais généraux en raison de bytecode interprétation, gestion de la mémoire de comptage de références, et type dynamique vérifier.

Optimisation

Programmes Perl, comme tout code, peuvent être accordées pour des performances en utilisant des repères et des profils après une mise en ??uvre lisible et correcte est terminée. En partie à cause de la nature interprétée de Perl, l'écriture plus efficace Perl ne sera pas toujours suffisant pour répondre à ses objectifs de performance pour un programme.

Dans de telles situations, les routines les plus critiques d'un programme Perl peuvent être écrits dans d'autres langues telles que C ou assembleur, qui peuvent être connectés à Perl via des modules Inline simples ou plus complexes, mais souple mécanisme XS. Nicholas Clark, un développeur du noyau Perl, Perl traite de certains conception des compromis et des solutions dans Quand perl est pas assez rapide .

Dans les cas extrêmes, l'optimisation de Perl peut nécessiter une connaissance intime des rouages ??????de l'interprète plutôt que les compétences avec des algorithmes, le langage Perl, ou des principes généraux de l'optimisation.

Avenir

En 2000 Conférence Perl, Jon Orwant fait un cas pour une nouvelle initiative majeure de la langue. Cela a conduit à la décision de commencer à travailler sur une refonte de la langue, d'être appelés Perl 6. Propositions pour de nouvelles fonctionnalités de langage ont été sollicitées auprès de la communauté Perl en général, et plus de 300 RFC ont été soumises.

Larry Wall a passé les quelques prochaines années digérer les RFC et les synthétiser dans un cadre cohérent pour Perl 6. Il a présenté son projet pour Perl 6 dans une série de documents appelés «apocalypses», qui sont numérotées pour correspondre aux chapitres de la programmation Perl ( "La Camel Book"). La spécification actuelle, pas encore finalisé de Perl 6 est encapsulé dans les documents de conception appelés synopsis, qui sont numérotées pour correspondre à Apocalypses.

Perl 6 ne vise pas à être rétro-compatible, mais il y aura un mode de compatibilité.

travaux de thèse par Bradley M. Kuhn, supervisé par Larry Wall, considéré comme l'utilisation possible de la machine virtuelle Java comme un runtime pour Perl .. thèse de Kuhn a montré que cette approche est problématique, et en 2001, il a été décidé que Perl 6 courrait sur un cross-language machine virtuelle appelé Parrot. Cela signifie que d'autres langues ciblant le Parrot auront accès natif à CPAN, permettant un certain niveau de développement inter-langues.

En 2005 Audrey Tang a créé le projet de carlins, une implémentation de Perl 6 dans Haskell. Cela a été et continue d'agir comme une plate-forme de test pour le langage Perl 6 (distinct de l'élaboration de la mise en ??uvre effective) permettant aux concepteurs de langage à explorer. Le projet de carlins engendré une communauté de langue de croix Perl / Haskell actif centré autour de la chaîne perl6 irc freenode #.

Un certain nombre de fonctions dans le langage Perl 6 montrent maintenant similitudes avec Haskell, et Perl 6 a été adopté par la communauté Haskell comme un langage de script potentiel.

En 2006, Perl 6, Parrot, et carlins sont en cours de développement, et un nouveau module pour Perl 5 appelév6 permet un peu de code Perl 6 pour fonctionner directement sur ??????le dessus de Perl 5.

Développement de Perl 5 se poursuit également. Perl 5.10 a été publié en Décembre 2007, avec quelques nouvelles fonctionnalités influencés par la conception de Perl 6.

La communauté Perl

La culture et la communauté Perl a développé parallèlement à la langue elle-même. Usenet a été le premier lieu public où Perl a été introduit, mais au cours de son évolution, la communauté Perl a été façonnée par la croissance de l'élargissement des services basés sur Internet, y compris l'introduction du Monde Toile Large. La communauté qui entoure Perl était, en fait, le thème de la première «Etat de l'oignon" de Larry Wall parler.

État de l'oignon

État de l'oignon est le nom de chaque année de Larry Wall résumés keynote de style sur les progrès de Perl et de sa communauté. Ils sont caractérisés par son humour caractéristique, employant des références à Perl et la culture des hackers plus large, ainsi que linguistique et parfois son origine chrétienne de mur.

Chaque exposé est d'abord donnée à diverses conférences Perl et éventuellement également publié en ligne.

Passe-temps

Les passe-temps de Perl sont devenus un élément déterminant de la communauté. Parmi elles, des usages triviaux et complexes de la langue.

JAPHs

Dans courriel, Usenet et le message des affectations, "Juste un autre pirate Perl "(JAPH) programmes sont devenus une tendance commune, originaire parRandal L. Schwartz, l'un des premiers formateurs de Perl professionnels.

Dans le langage de la culture Perl, les programmeurs Perl sont connus comme les pirates Perl, et de cette dérive de la pratique de l'écriture des programmes courts d'imprimer la phrase " Juste un autre hacker Perl, ". Dans l'esprit du concept original, ces programmes sont modérément obscurcis et suffisamment court pour tenir dans la signature d'un message électronique ou Usenet. Le JAPH "canonique" comprend la virgule à la fin, même si cela est souvent omise.

Perl de golf

Perl "golf" est le passe-temps de réduire le nombre de caractères utilisés dans un programme Perl au strict minimum, autant que la façon dont terrains de joueurs cherchent à prendre aussi peu de coups que possible dans un tour. Cette utilisation du mot "golf" initialement axée sur les JAPHs utilisés dans les signatures de messages Usenet et d'ailleurs, si les mêmes cascades avaient été un passe-temps sans nom dans la langue APL dans les décennies précédentes. L'utilisation de Perl pour écrire un programme qui a effectué le cryptage RSA a suscité un large intérêt et pratique dans ce passe-temps. Dans les années suivantes, le code de golf a été pris comme un passe-temps dans d'autres langues que Perl.

Obfuscation

Comme C,compétitions de code brouillées sont un passe-temps bien connu. Le rapport annuel Obfuscated concours Perl fait une vertu de la voûte de flexibilité syntaxique de Perl.

Po??sie

Semblable au code brouillé et le golf, mais avec un but différent, la poésie Perl est la pratique de l'écriture des poèmes qui peuvent effectivement être compilé comme légale (bien que généralement non-sens) du code Perl. Ce passe-temps est plus ou moins unique de Perl en raison du grand nombre de mots anglais régulières utilisées dans la langue. Nouveaux poèmes sont régulièrement publiés dans la section Perl Poésie de site de Perl Monks.

CPAN Acme

Il ya aussi de nombreux exemples de code écrites purement pour le divertissement sur ??????le CPAN. Lingua :: Romana Perligata , par exemple, permet d'écrire des programmes en latin . Lors de l'exécution d'un tel programme, le module traduit son code source en Perl régulière et l'exécute.

La communauté Perl a mis de côté le « namespace Acme "pour les modules qui sont amusantes dans la nature (mais son champ d'application est élargi pour inclure du code exploratoire ou expérimentale ou tout autre module qui ne se veut jamais être utilisé dans la production). Certains des modules Acme sont délibérément mis en ??uvre de façon amusante. Cela inclut Acme de l'eau de Javel , l'un des premiers modules dans le Acme :: namespace, qui permet le code source du programme à être "blanchi" (ie, tous les caractères remplacés par des espaces) et pourtant fonctionnent toujours.

R??cup??r?? ?? partir de " http://en.wikipedia.org/w/index.php?title=Perl&oldid=227514814 "