Perl

**Perl** (shqiptuar "përll") është një gjuhë programimi e nivelit të lartë, me qëllim të përgjithshëm, të interpretuar dhe dinamik. Megjithëse Perl nuk është ende zyrtarisht një akronim,   ka emërtime të ndryshme në përdorim duke perfshire: Nxjerrjen praktike dhe Gjuhen raportuese. 

Perl u zhvillua nga Larry Wall në vitin 1987  si një gjuhë skriptimi me qëllime të përgjithshme Unix për të bërë më të lehtë përpunimin e raporteve.  Perl fillimisht nuk ishte me shkronjë të madhe dhe emri iu ndryshua në shkronja të mëdha në kohën kur u lansua Perl 4.  Të dyja gjuhët programuese vazhdojnë të zhvillohen në mënyrë të pavarur nga njera tjetetra por ekipet e tyre zhvilluese huazojne lirisht ide nga njera tjetra, per te miren e te dy versioneve. 

Perl huazon veçori nga gjuhë të tjera programimi duke përfshirë C, sh, AWK dhe sed .  Perl ofron lehtesim të përpunimit të tekstit pa kufizimet arbitrare të gjatësisë së të dhënave të shumë veglave bashkëkohore të linjës së komandës Unix .  Perl është një gjuhë programimi shumë ekspresive qe do te thote se kodi burimor për një algoritëm të caktuar mund të jetë i shkurtër dhe shumë lehte i compresueshem qe do te thote se mund te shkruhet thjesht. 

Perl fitoi popullaritet të gjerë në mesin e viteve 1990 si një gjuhë skriptimi CGI, pjesërisht për shkak të shprehjes së saj të fuqishme të rregullt dhe aftësive të analizimit të vargjeve.   Përveç CGI, Perl 5 përdoret për administrimin e sistemit, programimin e rrjetit, financat, bioinformatikën dhe aplikacione të tjera, si për ndërfaqet grafike të përdoruesit (GUI). Perl gjithashtu mund te perdoret nga fillestaret per projekte si: numerues fjalesh, kalkulator BMI, Menaxher Liste Detyrash, shkurtues URL, loje RPG me tekst, dhe sistem Blog/CMS.

Ajo është mbiquajtur "sharrë elektrike me zinxhir për gjuhët e shkrimit të ushtrisë zvicerane" për shkak të fleksibilitetit dhe fuqisë së saj.  Në vitin 1998, ajo u referua gjithashtu si " shirit ngjitës që mban të bashkuar internetin ", duke iu referuar si përdorimit të tij të kudondodhur si gjuhë ngjitëse, ashtu edhe mungesës së elegancës së perceptuar. 

## Emri dhe logot 
Perl fillimisht u quajt "Pearl". Wall donte t'i jepte gjuhës një emër të shkurtër me konotacion pozitiv. Është gjithashtu një referencë e krishterë për Shëmbëlltyrën e Perlës nga Ungjilli i Mateut.  Megjithatë, Wall zbuloi gjuhën ekzistuese PEARL përpara publikimit zyrtar të Perl dhe hoqi "a" nga emri, duke e ndryshuar nga Pearl ne Perl. 

*Programimi Perl*, i  botuar nga O'Reilly Media, përmban një foto të një deveje dromedare në kopertinë dhe zakonisht quhet "Libri i devesë".  Ky imazh është nje simbol jozyrtar i Perl. O'Reilly zotëron imazhin si markë tregtare, por e licencon atë për përdorim jokomercial, . O'Reilly ofron gjithashtu logot "Programimi i Republikës së Perl" për faqet jokomerciale dhe butonat "Powered by Perl" për çdo sajt që përdor Perl.  Simboli është një lojë fjalësh pamore mbi qepën e perlës . 

## Historia 
### Versionet e hershme 
Larry Wall Filloi të punojë me gjuhën programuese Perl në vitin 1987, kur u punësua si programues në një kompani. Unisys ;  ai lansoi versionin 1.0 më 18 dhjetor te vitit 1987.   Muri bazoi *Perl-in* e hershëm në disa metoda që gjuhët ekzistuese të përdorura për manipulimin e tekstit.  paraqiti një motor më të mirë të shprehjes së rregullt. Perl 3, i lëshuar në tetor te vitit 1989, 

### Vitet 1990 
```perl
print "Hello, World!\n";
```
Fillimisht, i vetmi dokumentacion për gjuhen programuese Perl ishte një faqe e vetme e gjatë e njeriut . Në vitin 1991, *Programming Perl*, i njohur për shumë programues të Perl si "Libri Camel" për shkak të kopertinës së tij e cila permbante nje deve ne te, u botua dhe u bë referenca faktike për gjuhën.  Në të njëjtën kohë, numri i versionit të Perl u rrit në 4 dhe sepse kishte ndyshime te medhaj në gjuhë, por për të identifikuar versionin që ishte dokumentuar mirë nga libri.  Perl 4 u lansua në mars te vitit 1991. 

Perl 4 kaloi nëpër disa versione mirëmbajtjeje, duke arritur kulmin me Perl 4.036 në vitin 1993. Pas kësaj, Wall vendosi të braktisë Perl 4 për të nisur zhvillimin e Perl 5. Dizajni fillestar i Perl 5 filloi në vitin 1994. Në maj të atij viti, u krijua lista e postimeve perl5-porters për të koordinuar përpjekjet për transferimin e Perl 5 në platforma të ndryshme. Kjo listë mbetet forumi kryesor për zhvillimin, mirëmbajtjen dhe transferimin e versionit Perl 5.

Perl 5.000 u lëshua më 17 tetor 1994. Ky version përfaqësonte një rishkrim pothuajse të plotë të përkthyesit dhe shtoi shumë veçori të reja në gjuhë, duke përfshirë objekte, referenca, variabla leksikore (my) dhe module. Një nga veçoritë më të rëndësishme ishte mekanizmi i moduleve, i cili mundësoi zgjerimin e gjuhës pa modifikuar përkthyesin. Kjo lejoi që interpretuesi kryesor të stabilizohej, ndërsa programuesit e zakonshëm Perl mund të shtonin veçori të reja gjuhësore. Perl 5 ka qenë në zhvillim aktiv që nga ajo kohë.

Perl 5.001 u lëshua më 13 mars 1995. Perl 5.002 u prezantua më 29 shkurt 1996 dhe përfshinte tiparin e ri të prototipave. Ky tipar i lejoi autorët e moduleve të krijonin nënprograme që silleshin si funksionet e ndërtuara të Perl-it. Perl 5.003 u lëshua më 25 qershor 1996 si një version sigurie

c, Rrjeti Gjithëpërfshirës i Arkivave Perl (CPAN) u krijua si një depo për gjuhën Perl dhe modulet Perl ;   , ai mbart mbi 211,850 module në 43,865 shpërndarje, të shkruara nga më shumë se 14,324 autorë dhe është pasqyruar në mbarë botën në më shumë se 245 vendndodhje. 

Perl 5.004 u publikua më 15 maj 1997, dhe ndër të tjera, përfshiu paketën UNIVERSAL, e cila i bëri të gjitha klasat të rrjedhin automatikisht nga një objekt bazë dhe shtoi aftësinë për të kërkuar versionet e moduleve. Një zhvillim tjetër kyç ishte shtimi i modulit CGI.pm, i cili ndihmoi në rritjen e popullaritetit të Perl si gjuhë për skriptimin CGI.. [2]

Perl 5.004 shtoi mbështetje për Microsoft Windows, Plan 9, QNX dhe AmigaOS . 

Perl 5.005 u publikua më 22 korrik 1998. Ky version solli përmirësime në motorin e regex, lidhje të reja backend përmes moduleve B::*, operatorin e ri qr// për citimin e regex, si dhe një gamë të gjerë të moduleve të reja bazë. Gjithashtu, u shtua mbështetje për disa sisteme operative të reja, përfshirë BeOS.. 

### 2000–2020 
Perl 5.6 u publikua më 22 mars 2000. Ndryshimet kryesore përfshijnë mbështetjen për 64-bit, si dhe prezantimin e shumë veçorive të reja.Unicode, mbështetjen për skedarët mbi 2 GiB dhe fjalën kyçe "jonë".Gjatë zhvillimit të Perl 5.6, u mor vendimi për të ndryshuar skemën e versionimit në një mënyrë të ngjashme me projektet e tjera open source; pas versionit 5.005_63, versioni i ardhshëm ishte 5.5.640, me një strategji që versionet në zhvillim të kenë numra tek dhe versionet e qëndrueshme të kenë numra çift.. 

Në vitin 2000, Wall bëri thirrje për sugjerime nga komuniteti për një version të ri të Perl. Ky proces çoi në krijimin e 361 dokumenteve RFC (Kërkesë për Komente) që do të udhëhiqnin zhvillimin e Perl 6. Në vitin 2001, filloi puna mbi "Apokalipset" e Perl 6, një seri dokumentesh që synonin të grumbullonin kërkesat për ndryshime dhe të shpalosnin projektin e gjeneratës së re të Perl. Këto dokumente u paraqitën si një përmbledhje e RFC-ve, jo si një dokument zyrtar. Atë kohë, Perl 6 ishte vetëm një përshkrim i një gjuhe të re.&#x5B; '** &#x5D;

Perl 5.8 u publikua për herë të parë më 18 korrik 2002, dhe që nga ajo kohë, versionet e reja 5.X janë lëshuar rregullisht çdo vit. Perl 5.8 solli përmirësime në mbështetjen e Unicode, një implementim të ri të I/O-së, një sistem të ri të thread-eve, përmirësoi saktësinë numerike, dhe shtoi disa module të reja. Deri në vitin 2013, ky version mbeti si versioni më i përdorur i Perl.a Red Hat Linux 5, SUSE Linux 10, Solaris 10, HP-UX 11.31 dhe AIX 5.

Në vitin 2004, nisi zhvillimi i "Sinopses" - dokumentacionit që në fillim përfshinte Apokalipsin, por më pas u transformua në specifikimin e gjuhës Perl 6. Në shkurt të vitit 2005,, Audrey Tang filloi punën në Pugs, një përkthyes i Perl 6 i shkruar në Haskell . Ky ishte përpjekja e parë e përbashkët për të bërë Perl 6 një realitet, por përpjekja u ndal në vitin 2006. 

Projekti Perl On New Internal Engine (PONIE) ishte aktiv nga viti 2003 deri më 2006. Ai synonte të krijojë një urë midis Perl 5 dhe Perl 6, duke rishkruar interpretuesin e Perl 5 për të funksionuar në makinën virtuale Perl 6 Parrot. Qëllimi kryesor ishte të ruante të ardhmen e miliona rreshtave të kodit Perl 5 që përdoren nga mijëra kompani në të gjithë botën. Projekti PONIE u mbyll në vitin 2006 dhe nuk është më në zhvillim aktiv. Disa nga përmirësimet që u bënë në interpretuesin e Perl 5 gjatë PONIE janë integruar në projektin më të gjerë. 

Më 18 dhjetor 2007, për të shënuar 20-vjetorin e Perl 1.0, u publikua Perl 5.10.0. Ky version i Perl përfshinte karakteristika të reja të rëndësishme që e bënin atë më të ngjashëm me Perl 6, duke përfshirë një deklaratë të re ndërprerëse (e njohur si "given"/"when"), përmirësime në shprehjet e rregullta dhe operatorin e ri të krahasimit inteligjent (~~). Në të njëjtën periudhë, u nis zhvillimi i një implementimi tjetër të Perl 6, i quajtur Rakudo Perl, i cili u zhvillua në bashkëpunim me makinën virtuale Parrot. Duke filluar nga nëntori i vitit 2009, Rakudo Perl ka ofruar lëshime të rregullta mujore dhe aktualisht është implementimi më i plotë i Perl 6.

Një transformim i rëndësishëm në procesin e zhvillimit të Perl 5 u shënua me versionin 5.11; komuniteti i zhvilluesve adoptoi një cikël mujor të lëshimeve të zhvillimit, duke ndjekur një kalendar vjetor për lëshimet e qëndrueshme. Bazuar në këtë kalendar, versionet e korrigjuara do të publikohen çdo tre muaj pas çdo lëshimi të qëndrueshëm.&#x5B; **' &#x5D;

Më 12 Prill 2010, u bë lëshimi i Perl 5.12.0. Ndër përmirësimet kryesore që dallohen janë sintaksa e re në deklaratat e paketave me emër dhe version., operatorin yada yada(që synon të regjistrojë kodin e mbajtësit të vendndodhjes që ende nuk është implementuar), strukturat e nënkuptuara, pajtueshmërinë e plotë të Y2038, mbingarkimin e konvertimit regex, mbështetjen DTrace dhe Unicode 5.2. 

Më 14 maj 2011, Perl 5.14 u lëshua me mbështetje të integruar JSON . 

Më 20 maj 2012, u bë lirimi i Perl 5.16. Një nga karakteristikat e reja të spikatura është aftësia për të specifikuar një version të veçantë të Perl që dëshiron të përdoret, e cila u mundëson përdoruesve të azhurnojnë versionin e tyre të Perl dhe të vazhdojnë të ekzekutojnë skriptet e vjetra që zakonisht do të ishin të papajtueshme. Perl 5.16 gjithashtu përditëson bërthamën për të mbështetur Unicode 6.1. 

Më 27 maj 2014, u bë lëshimi i Perl 5.20. Disa nga veçoritë e reja përfshijnë nënshkrimet e nënrutinave, sintaksën e re për feta hash, çreferencimin postfiks (eksperimental), përditësimin në Unicode 6.3, dhe përmirësimin e funksionit rand() me një gjenerator të qëndrueshëm të numrave të rastësishëm.. 

Shumë vëzhgues lidhin lëshimin e Perl 5.10 me nisjen e lëvizjes së Perl-it Modern. Kjo lëvizje përfaqëson një metodë zhvillimi që inkurajon përdorimin e CPAN dhe përfitimin nga avancimet më të reja në gjuhën programuese, duke u përqendruar në prodhimin e kodit të cilësisë së lartë. Libri "Modern Perl" shpesh konsiderohet si një standard i kësaj filozofie, ndërsa organizata si Perl Enlightenment Organization gjithashtu kanë mbështetur këtë qasje.

Në fund të vitit 2012 dhe 2013, filluan disa projekte për zbatime alternative për Perl 5: Perl5 në Perl6 nga ekipi Rakudo Perl,  *moe* nga Stevan Little dhe miqtë,  *p2*  nga ekipi Perl11 nën Reini Urban, *gperl* nga goccy,  dhe *rperl ,* një projekt Kickstarter i udhëhequr nga Will Braswell dhe i lidhur me projektin Perl11. 

### Perl 6 dhe Raku 
parapamje| *Camelia*, logoja e projektit Perl 6
Në Konferencën Perl Në vitin 2000, Jon Orwant argumentoi për një iniciativë të re të rëndësishme gjuhësore. Kjo çoi në vendimin për të nisur punën në një ridizajnim të gjuhës, e cila do të emërtohej Perl 6. Komuniteti i Perl në përgjithësi u ftua të propozonte veçori të reja gjuhësore, duke paraqitur më shumë se 300 sugjerime. RFC . 

Wall kaloi vitet pasuese duke analizuar RFC-të dhe duke i bashkuar ato në një strukturë të qëndrueshme për Perl 6. Ai paraqiti projektin e tij për Perl 6 në një seri dokumentacioni të quajtur "Apokalipsa", të cilat ishin të numëruara për të përputhur me kapitujt në librin "Programimi në Perl". Duke filluar nga janari i vitit 2011, specifikimi në zhvillim i Perl 6 është përfshirë në dokumentet e dizajnit të njohura si Synopses, të cilat janë të numëruara për të korresponduar me Apokalipsën. 

Puna e tezës nga Bradley M. Kuhn,e mbikëqyrur nga Wall, u konsiderua përdorimi i mundshëm i makinës virtuale Java si një kohëzgjatje për Perl, teza e Kuhn-it tregoi se kjo qasje ishte problematike. Në vitin 2001, u vendos që Perl 6 do të funksiononte në një mënyrë të re.ë makinë virtuale ndër-gjuhëshe të quajtur Parrot .

Në vitin 2005, Audrey Tang krijoi projektin Pugs, një zbatim i Perl 6 në Haskell . Ky projekt vepron dhe vazhdon të funksionojë si një platformë testimi për gjuhën Perl 6 (e ndarë nga zhvillimi i implementimit aktual), duke u lejuar dizajnerëve të gjuhës të eksperimentojnë. Projekti Pugs ka krijuar një komunitet aktiv ndërlidhës Perl/Haskell të fokusuar rreth kanalit. Libera Chat #raku IRC. Shumë ndikime të programimit funksional u përvetësuan nga ekipi i projektimit Perl 6. 

Në vitin 2012, zhvillimi i Perl 6 ishte i fokusuar kryesisht në dy kompilatorë:

# Rakudo,Një aplikacion që operon në makinën virtuale Parrot dhe JVM te njohur si Java Virtual Machine. 
# Niecza, e cila synon kohën e ekzekutimit të gjuhës së përbashkët .

Në vitin 2013, u njoftua MoarVM ("Metamodel On A Runtime"), një makinë virtuale e bazuar në gjuhën C, e krijuar kryesisht për Rakudo. 

Në tetor 2019, Perl 6 u riemërua në Raku. 

 only the Rakudo implementation and MoarVM are under active development, and other virtual machines, such as the Java Virtual Machine and JavaScript, are supported.

### Perl 7 
Në qershor 2020, Perl 7 u shpall si pasardhësi i Perl 5.  Perl 7 fillimisht do të bazohej në Perl 5.32 me një lëshim që pritej në gjysmën e parë të 2021 dhe do të lironte kandidatët më shpejt. 

Ky plan u rishikua në maj 2021, pa asnjë afat kohor lëshimi ose version të Perl 5 për përdorim si bazë të specifikuar.  Kur Perl 7 do të dilte, Perl 5 do të kishte kaluar në mirëmbajtje afatgjatë. Versionet e mbështetura të Perl 5 megjithatë do të vazhdojnë të marrin siguri të rëndësishme dhe rregullime të gabimeve. 

Perl 7 u shpall në 24 qershor 2020 në "Konferencën e Perl në re" si pasardhësi i Perl 5.   Bazuar në Perl 5.32, Perl 7 ishte planifikuar të ishte në përputhje me kodin modern Perl 5; Kodi Perl 5, pa boilerplate (pragma) header duhet shtuar `use compat::perl5;` për të qëndruar i pajtueshëm, por kodi modern mund të bjerë një pjesë të pllakës së bojlerit.

Megjithatë, plani për të shkuar te Perl 7 shkaktoi më shumë diskutime dhe Komiteti Drejtues i Perl e anuloi atë për të shmangur problemet me pajtueshmërinë e prapambetur për skriptet që nuk ishin shkruar në pragmat dhe modulet që do të bëheshin parazgjedhja në Perl 7. Perl 7 do të dalë vetëm kur zhvilluesit të shtojnë veçori të mjaftueshme për të garantuar një përmirësim të madh të lëshimit. 

## Dizajn 
```perl
print "Hello, World!\n";
```

### Filozofia 
Sipas Wall, Perl ka dy slogane. E para është "Ka më shumë se një mënyrë për ta bërë atë", e njohur zakonisht si TMTOWTDI, (shqiptohet *Tim Toady* ). Siç argumentojnë ithtarët e kësaj motoje, kjo filozofi e bën të lehtë shkrimin e deklaratave koncize.   

Slogani i dytë është "Gjërat e lehta duhet të jenë të lehta dhe gjërat e vështira duhet të jenë të mundshme". 

Dizajni i Perl mund të kuptohet si një përgjigje ndaj tre tendencave të gjera në industrinë kompjuterike: rënia e kostove të harduerit, rritja e kostove të punës dhe përmirësimet në teknologjinë e përpiluesit . Shumë gjuhë të mëparshme kompjuterike, si Fortran dhe C, synonin të përdornin me efikasitet harduerin e shtrenjtë kompjuterik. Në të kundërt, Perl u krijua në mënyrë që programuesit kompjuterikë të mund të shkruanin programe më shpejt dhe më lehtë. 

Perl ka shumë veçori që lehtësojnë detyrën e programuesit në kurriz të kërkesave më të mëdha të CPU dhe memories. Këto përfshijnë menaxhimin automatik të kujtesës; shtypje dinamike ; vargje, lista dhe hash; shprehje të rregullta; introspeksioni ; dhe një funksion `eval()` . Perl ndjek teorinë e "pa kufij të integruar",  një ide e ngjashme me rregullin Zero One Infinity .

Wall u trajnua si gjuhëtar, dhe dizajni i Perl është shumë i informuar nga parimet gjuhësore . Shembujt përfshijnë kodimin Huffman (ndërtimet e zakonshme duhet të jenë të shkurtra), peshimi i mirë në fund (informacioni i rëndësishëm duhet të jetë i pari) dhe një koleksion i madh primitivësh gjuhësor . Perl favorizon konstruktet gjuhësore që janë koncize dhe të natyrshme që njerëzit të shkruajnë, edhe kur ato e komplikojnë interpretuesin Perl. 

Sintaksa e Perl-it pasqyron idenë se "gjërat që janë të ndryshme duhet të duken ndryshe".  Për shembull, skalarët, vargjet dhe hash-et kanë sigila të ndryshëm kryesorë. Indekset e grupeve dhe çelësat hash përdorin lloje të ndryshme mbajtëse. Vargjet dhe shprehjet e rregullta kanë ndarës të ndryshëm standardë.

Ekziston një prirje e gjerë praktike si për gjuhën Perl, ashtu edhe për komunitetin dhe kulturën që e rrethojnë atë. Parathënia e *Programimit Perl* fillon: "Perl është një gjuhë për të kryer punën tuaj."  Një pasojë e kësaj është se Perl nuk është një gjuhë e rregullt. Ai përfshin shumë veçori, toleron përjashtime nga rregullat e tij dhe përdor heuristikat për të zgjidhur paqartësitë sintaksore. Për shkak të natyrës falëse të përpiluesit, gabimet ndonjëherë mund të jenë të vështira për t'u gjetur. Dokumentacioni i funksionit të Perl-it vëren sjelljen e variantit të funksioneve të integruara në kontekste liste dhe skalare duke thënë: "Në përgjithësi, ata bëjnë atë që dëshironi, përveç nëse dëshironi konsistencë." 

### Veçoritë 
Struktura e përgjithshme e Perl rrjedh gjerësisht nga C. Perl është procedurale në natyrë, me variabla, shprehje, deklarata të caktimit, blloqe të kufizuara me kllapa, struktura kontrolli dhe nënprograme . 

Perl gjithashtu merr veçori nga programimi i guaskës. Të gjitha variablat janë të shënuara me sigila kryesore, të cilat lejojnë që variablat të ndërthuren drejtpërdrejt në vargje . Megjithatë, ndryshe nga shell, Perl përdor sigil në të gjitha akseset në variabla, dhe ndryshe nga shumica e gjuhëve të tjera të programimit që përdorin sigil, sigil nuk tregon llojin e ndryshores, por llojin e shprehjes. Kështu për shembull, ndërsa një grup shënohet me sigil "@" (për shembull `@arrayname` ), një anëtar individual i grupit shënohet me sigil skalar "$" (për shembull `$arrayname[3]` ). Perl gjithashtu ka shumë funksione të integruara që ofrojnë mjete që përdoren shpesh në programimin e guaskës (megjithëse shumë prej këtyre mjeteve zbatohen nga programe të jashtme të shell-it) të tilla si renditja dhe thirrja e objekteve të sistemit operativ .

Perl merr hash ("vargje shoqëruese") nga AWK dhe shprehje të rregullta nga sed . Këto thjeshtojnë shumë detyra analizimi, trajtimi të tekstit dhe menaxhimin e të dhënave. E ndarë me Lisp është kthimi i nënkuptuar i vlerës së fundit në një bllok, dhe të gjitha deklaratat janë gjithashtu shprehje që mund të përdoren në vetë shprehjet më të mëdha.

Perl 5 shtoi veçori që mbështesin strukturat komplekse të të dhënave, funksionet e klasit të parë (d.m.th., mbylljet si vlera) dhe një model programimi të orientuar nga objekti. Këto përfshijnë referencat, paketat, dispeçimin e metodës së bazuar në klasë dhe variablat me shtrirje leksikore, së bashku me direktivat e përpiluesit (për shembull, pragma `strict` ). Një veçori kryesore shtesë e prezantuar me Perl 5 ishte aftësia për të paketuar kodin si module të ripërdorshme. Wall më vonë deklaroi se "I gjithë qëllimi i sistemit të moduleve të Perl 5 ishte të inkurajonte rritjen e kulturës Perl në vend të bërthamës së Perl." 

Të gjitha versionet e Perl bëjnë shtypjen automatike të të dhënave dhe menaxhimin automatik të kujtesës . Përkthyesi njeh llojin dhe kërkesat e ruajtjes së çdo objekti të të dhënave në program; ndan dhe liron ruajtje për ta sipas nevojës duke përdorur numërimin e referencës (kështu që nuk mund të shpërndajë strukturat rrethore të të dhënave pa ndërhyrje manuale). Konvertimet e tipit ligjor - për shembull, konvertimet nga numri në varg - bëhen automatikisht në kohën e ekzekutimit ; konvertimet e tipit të paligjshëm janë gabime fatale.

### Sintaksë 
Perl është referuar si "  " dhe një "gjuhë vetëm për të shkruar" nga kritikët e saj. Randal L. Schwartz në edicionin e parë të librit *Learning Perl*,  në kapitullin e parë thotë: "Po, ndonjëherë Perl duket si zhurmë e linjës për të pa iniciuarin, por për programuesin e kalitur të Perl, duket si zhurmë e linjës me përmbledhje kontrolli me një mision në jetë”.  Ai gjithashtu deklaroi se akuza se Perl është një gjuhë vetëm për të shkruar mund të shmanget duke koduar me "kujdesin e duhur".  Sidoqoftë, moduli anglez ofron alternativa të gjata dhe të shkurtra në anglisht. Dokumenti *perlstyle* thotë se zhurma e linjës në shprehjet e rregullta mund të zbutet duke përdorur modifikuesin `/x` për të shtuar hapësirën e bardhë. 

Sipas *FAQ të Perl 6*, Perl 6 u krijua për të zbutur "të dyshuarit e zakonshëm" që nxisin pretendimin e "zhurmës së linjës" nga kritikët e Perl 5, duke përfshirë heqjen e "shumicës së variablave të pikësimit" dhe pastrimin e sintaksës regex. .  *Pyetjet e shpeshta të Perl 6* gjithashtu theksojnë se ajo që nganjëherë referohet si zhurma e linjës së Perl është "sintaksa aktuale e gjuhës" ashtu si gerundet dhe parafjalët janë pjesë e gjuhës angleze .  Ai gjithashtu deklaroi se "Perl 6 ka një koherencë dhe një qëndrueshmëri që i mungon Perl 5."  dhe disa projekte  synojnë të zbatojnë disa ose të gjitha specifikimet.

Perl zbatohet si një interpretues bazë, i shkruar në C, së bashku me një koleksion të madh modulesh, të shkruara në Perl dhe C. , interpretuesi është 150,000 rreshta të kodit C dhe përpilohet në një 1&nbsp;MB i ekzekutueshëm në arkitekturat tipike të makinerive. Përndryshe, përkthyesi mund të kompilohet në një bibliotekë lidhjesh dhe të futet në programe të tjera. Ka rreth 500 module në shpërndarje, që përfshijnë 200,000 rreshta Perl dhe 350,000 rreshta shtesë të kodit C (shumica e kodit C në module përbëhet nga tabela koduese të karaktereve ).

Përkthyesi ka një arkitekturë të orientuar nga objekti. Të gjithë elementët e gjuhës Perl - skalarët, vargjet, hashët, kodifikuesit, dorezat e skedarëve - përfaqësohen në përkthyes nga strukturat C. Operacionet në këto struktura përcaktohen nga një koleksion i madh makrosh, tipografish dhe funksionesh; këto përbëjnë Perl C API . Perl API mund të jetë befasues për ata që nuk janë iniciuar, por pikat e hyrjes së tij ndjekin një skemë të qëndrueshme emërtimi, e cila ofron udhëzime për ata që e përdorin atë.

Jeta e një përkthyesi Perl ndahet gjerësisht në një fazë përpilimi dhe një fazë ekzekutimi.  Në Perl, *fazat* janë fazat kryesore në ciklin jetësor të përkthyesit. Çdo përkthyes kalon nëpër secilën fazë vetëm një herë, dhe fazat vijojnë në një sekuencë të caktuar.

Shumica e asaj që ndodh në fazën e përpilimit të Perl është përpilimi, dhe shumica e asaj që ndodh në fazën e ekzekutimit të Perl është ekzekutimi, por ka përjashtime të rëndësishme. Perl përdor me rëndësi aftësinë e saj për të ekzekutuar kodin Perl gjatë fazës së kompilimit. Perl gjithashtu do të vonojë përpilimin në fazën e ekzekutimit. Termat që tregojnë llojin e përpunimit që po ndodh në të vërtetë në çdo moment janë *koha e përpilimit* dhe *koha e ekzekutimit* . Perl është në kohën e përpilimit në shumicën e pikave gjatë fazës së përpilimit, por koha e përpilimit mund të futet gjithashtu gjatë fazës së ekzekutimit. Koha e kompilimit për kodin në një argument të vargut të kaluar në `eval` të integruar ndodh gjatë fazës së ekzekutimit. Perl është shpesh në kohën e ekzekutimit gjatë fazës së përpilimit dhe shpenzon pjesën më të madhe të fazës së ekzekutimit në kohën e ekzekutimit. Kodi në blloqet `BEGIN` ekzekutohet në kohën e ekzekutimit, por në fazën e kompilimit.

Në kohën e përpilimit, përkthyesi analizon kodin Perl në një pemë sintakse . Në kohën e ekzekutimit, ai ekzekuton programin duke ecur në pemë . Teksti analizohet vetëm një herë, dhe pema e sintaksës i nënshtrohet optimizimit përpara se të ekzekutohet, kështu që ekzekutimi është relativisht efikas. Optimizimet në kohën e përpilimit në pemën e sintaksës përfshijnë palosjen e vazhdueshme dhe përhapjen e kontekstit, por kryhet gjithashtu optimizimi i hapave . 

Perl ka një gramatikë të plotë Turing sepse analizimi mund të ndikohet nga kodi i kohës së ekzekutimit të ekzekutuar gjatë fazës së përpilimit.  Prandaj, Perl nuk mund të analizohet nga një kombinim i drejtpërdrejtë Lex / Yacc lexer / parser . Në vend të kësaj, përkthyesi zbaton lexerin e tij, i cili koordinohet me një analizues të modifikuar GNU bizon për të zgjidhur paqartësitë në gjuhë.

Thuhet shpesh se "Vetëm perl mund të analizojë Perl",  që do të thotë se vetëm interpretuesi Perl ( *`perl`* ) mund të analizojë gjuhën Perl ( *Perl* ), por edhe kjo nuk është, në përgjithësi, e vërtetë. Për shkak se përkthyesi Perl mund të simulojë një makinë Turing gjatë fazës së saj të kompilimit, ai do të duhet të vendosë problemin e ndalimit Për të përfunduar analizën në çdo rast, është një fakt i njohur se problemi i ndalimit është i pazgjidhshëm. Prandaj, as Perl nuk mund ta analizojë gjithmonë veten. Perl bën një zgjedhje të pazakontë duke i dhënë përdoruesit qasje në fuqinë e plotë programuese gjatë fazës së kompilimit. Kostoja në aspektin e pastërtisë teorike është e lartë, por problemet praktike janë të rralla.. 

PProgramet e tjera që janë të dizajnuara për të analizuar Perl, si.analizuesit e kodit burimor dhe indentuesit automatikë, duhet të përballen jo vetëm me konstruktet sintaksore të paqarta, por edhe me pavendosmërinë Analiza e Perl-it në një kontekst të përgjithshëm. Projekti PPI është Adam KennedyU fokusua në analizën e kodit Perl si dokument, duke ruajtur integritetin e tij si i tillë, në vend që të trajtohej si kod i ekzekutueshëm, çka as vetë Perl nuk mund ta garantojë gjithnjë. Kennedy ishte ai që së pari sugjeroi se parimi i Perl-it përballet me "problemin e ndalimit".,  që u vërtetua më vonë. 

Perl është një nga gjuhët e programimit që ka më shumë se 250,000 përdorues.teste funksionalePër gjuhën programuese Perl dhe më shumë se 250,000 teste funksionale për modulat bazë, këto teste janë pjesë integrale e procesit të ndërtimit dhe testojnë thellësisht interpretuesin dhe modulat kryesore. Zhvilluesit e Perl u mbështeten në këto teste funksionale për të garantuar që ndryshimet në interpretues nuk do të sjellin gabime në softuer ; më tej, përdoruesit e Perl që shohin se përkthyesi kalon testet e tij funksionale në sistemin e tyre mund të kenë një shkallë të lartë besimi se ai po funksionon siç duhet.

## Portet 
Perl është i licencuar dyfish si me Licencën Artistike 1.0   dhe me Licencën e Përgjithshme Publike GNU .  Shpërndarjet janë të disponueshme për shumicën e sistemeve operative .Perl është një gjuhë programimi që ka gjetur përdorim të gjerë në sistemet Unix dhe është portuar në shumicën e platformave moderne, si dhe në disa prej atyre më të vjetra. Me vetëm gjashtë përjashtime të njohura, Perl mund të kompilohet nga kodi burimor në çdo platformë që është në përputhje me POSIX ose që është e ngjashme me Unix. 

Për shkak të ndryshimeve të veçanta që kërkohen për mjedisin klasik të Mac OS, Një version i veçantë i quajtur MacPerl u zhvillua në mënyrë të pavarur.. 

Rrjeti Gjithëpërfshirës i Arkivit Perl Këtu paraqitet një listë e plotë e platformave të mbështetura, bashkë me lidhjet për shpërndarjet e disponueshme në secilën prej tyre. CPAN ofron gjithashtu modulet Perl që janë të disponueshme për publikun dhe që nuk janë përfshirë në shpërndarjen standarde të Perl. 

ActivePerl është një distribucion me kod burimor të mbyllur. ActiveStateQë ka lëshime të rregullta që gjurmojnë lëshimet kryesore të Perl. [92] Shpërndarja përfshinte më parëmenaxherin e paketave Perl (PPM),  n një mjet i njohur për instalimin, heqjen, përmirësimin dhe menaxhimin e moduleve të Perl; megjithatë, ky mjet u ndërpre me versionin ActivePerl 5.28. Përfshihet gjithashtu në këtë version.PerlScript, një motor Windows Script Host (WSH) që zbaton gjuhën Perl. Visual Perl është një mjet ActiveState që shton Perl në Visual Studio . Kompleti i zhvillimit NET . Një konvertues VBScript -Në Perl, një kompilues për Windows dhe konvertuesit e AWK dhe sed në Perl janë prodhuar gjithashtu nga kjo kompani dhe janë përfshirë në *CD-ja e ActiveState për Windows përfshin të gjitha shpërndarjet plus Komodo IDE, si dhe të gjitha versionet e tjera pas variantit të parë Unix–Linux–POSIX që u lançua në 2002.* 

## Performanca 
Loja e standardeve të gjuhës kompjuterike Krahasimi i performancës së zbatimeve të problemeve tipike të programimit në gjuhë të ndryshme programuese tregon se implementimet në Perl zakonisht janë në fund të spektrit të përdorimit të memorjes dhe ofrojnë rezultate me shpejtësi të variueshme. Performanca e Perl në lojën e standardeve është karakteristike për gjuhët e interpretuara.

Programet e mëdha në Perl nisin më ngadalë krahasuar me programet në gjuhët e kompiluara pasi Perl duhet të përpilojë kodin burimor çdo herë që ekzekutohet. Në një fjalim në konferencë,YAPC::Europe 2005 Në artikullin "Një fillim në kohë", Jean-Louis Leroy zbuloi se ekzekutimi i programeve të tij në Perl zgjati më shumë se sa ishte parashikuar, për shkak se interpretuesi i Perl-it kaloi shumë kohë duke kërkuar modulet nëpër një numër të madh të tyre. Perl, ndryshe nga Java, Python dhe Ruby, ofron vetëm mbështetje eksperimentale për kompilimin paraprak.  Prandaj, programet Perl paguajnë këtë dënim të përgjithshëm në çdo ekzekutim. Faza e ekzekutimit të programeve tipike është mjaft e gjatë sa që koha e amortizuar e fillimit të mos jetë thelbësore, por standardet që matin kohën shumë të shkurtër të ekzekutimit ka të ngjarë të anojnë për shkak të kësaj shpenzimi të përgjithshëm. 

Janë prezantuar disa mjetet për të përmirësuar këtë situatë. Mjeti i parë i tillë ishte mod_perl i Apache, i cili synonte të adresonte një nga arsyet më të zakonshme për thirrjen e shpejtë të programeve të vogla Perl: zhvillimi i Uebit CGI . ActivePerl, nëpërmjet Microsoft ISAPI, ofron përmirësime të ngjashme të performancës. 

Pas përpilimit të kodit Perl, gjatë fazës së ekzekutimit hasim shpenzime shtesë që zakonisht mungojnë në programet e shkruara në gjuhë të përpiluara si C ose C++. Këto shpenzime shtesë përfshijnë interpretimin. e bytekodit, menaxhimin e memories së numërimit të referencës dhe kontrollin dinamik të tipit. 

Rutinat kritike mund të programohen në gjuhë të tjera programuese si C, të cilat pastaj mund të integrohen me Perl përmes moduleve Inline ose përmes mekanizmit më kompleks dhe fleksibël të XS. . 

## Aplikacionet 
Perl ofron një gamë të gjerë aplikacionesh të ndryshme, të mbështetura nga disponueshmëria e moduleve të shumta standarde dhe atyre nga palë të treta.

Perl është përdorur gjerësisht për të shkruar skriptet CGI: disa nga projektet e mëdha që janë shkruar në Perl përfshijnë. cPanel, Slash, Bugzilla, RT, TWiki dhe Movable Type ;Faqet e internetit me trafik të lartë që përdorin gjerësisht gjuhën programuese Perl përfshijnë. Priceline.com, Craigslist,  IMDb,  LiveJournal, DuckDuckGo,   Slashdot dhe Ticketmaster .Ai gjithashtu mund të jetë një komponent opsional i një grupi të teknologjisë popullore. LAMP për zhvillimin e Uebit, në vend të PHP ose Python . Perl përdoret gjerësisht si një gjuhë programimi sistemiore në shpërndarjen Debian Linux . 

Perl përdoret shpesh si një gjuhë ngjitëse,Duke bashkuar sisteme dhe ndërfaqe që nuk janë dizajnuar specifikisht për të interaguar, dhe për" të dhënat munging ", Konvertimi ose përpunimi i sasive të mëdha të të dhënave për detyra si krijimi i raporteve është një nga pikat e forta të Perl, të cilat janë të lidhura ngushtë. Kombinimi i këtyre veçorive e bën Perl një gjuhë të popullarizuar për një gamë të gjerë qëllimesh. administratorët e sistemit, veçanërisht sepse programet e shkurtra, të quajtura shpesh " programe me një linjë ", mund të futen dhe të ekzekutohen në një linjë komande të vetme.&#x5D;

Kodi në Perl mund të bëhet portativ nëpër platforma të ndryshme. Windows dhe Unix; një kod i tillë është i zakonshëm nga furnizuesit e softuerit kompjuterik. (si komerciale jashtë raftit(COTS) si dhe me porosi, për të lehtësuar paketimin dhe mirëmbajtjen e skripteve të ndërtimit dhe vendosjes së softuerit.

Perl/Tk dhe wxPerl zakonisht përdoren për të shtuar ndërfaqe grafike të përdoruesit në skriptet Perl.

Aftësitë e Perl për përpunimin e tekstit mund të shfrytëzohen për të gjeneruar pyetje. SQL ;Grupet, hash-et dhe menaxhimi automatik i kujtesës lehtësojnë mbledhjen dhe përpunimin e të dhënave të kthyera. Për shembull, në ndërfaqen e programimit të aplikacionit Perl DBI tTim Bunce (API) lejon që argumentet në API të jenë teksti i pyetjeve SQL, e mundëson programimin në shumë gjuhë njëkohësisht, si për shembull, gjenerimin e një faqe interneti duke përdorur HTML, JavaScript dhe SQL në një dokument këtu ).Përdorimi i interpolimit të variablave në Perl për personalizimin programatik të çdo pyetjeje SQL dhe përdorimi i grupeve apo hasheve të Perl si struktura për të ruajtur të dhënat në mënyrë programatike. grupet e të dhënave që rezultojnë nga çdo pyetje SQL, lejon një mekanizëm të nivelit të lartë për trajtimin e sasive të mëdha të të dhënave. për përpunim pas nga një nënprogram Perl.  Në versionet e hershme të Perl, ndërfaqet e bazës së të dhënave u krijuan duke rilidhur përkthyesin me një bibliotekë të bazës së të dhënave nga ana e klientit Kjo u bë aq e vështirë sa u aplikua vetëm për disa prej bazave të të dhënave më të rëndësishme dhe më të përdorura, duke kufizuar ekzekutimin e Perl, që rezultoi në mundësinë e përdorimit të vetëm një interface të bazës së të dhënave në të njëjtën kohë. 

Në Perl 5, ndërfaqja e bazës së të dhënave implementohet përmes moduleve Perl DBI. Moduli DBI (Database Interface) ofron një ndërfaqe të unifikuar dhe të pavarur nga lloji i bazës së të dhënave për aplikacionet në Perl, ndërsa modulet DBD (Database Driver) menaxhojnë detajet e komunikimit me rreth 50 lloje të ndryshme të bazave të të dhënave; ekzistojnë drejtues DBD për shumicën e sistemeve të njohura të bazave të të dhënave.ANSI SQL . 

DBI ofron caching për dorëzat dhe pyetjet e bazës së të dhënave, që mund të rrisin ndjeshëm performancën në mjediset me ekzekutim të gjatë simod_perl,  duke ndihmuar sistemet me volum të lartë të shmangin rritjet e ngarkesës si në efektin Slashdot . 

Në aplikacionet moderne të Perl, veçanërisht ato që janë të shkruara duke përdorur korniza ueb si CatalystModuli DBI zakonisht përdoret në mënyrë indirekte. hartuesve të marrëdhënieve me objekte si DBIx::Class, Class::DBI  ose Rose::DB::Object  që krijojnë pyetje SQL dhe përpunojnë të dhënat në një mënyrë të qartë për autorin e aplikacionit. 

## Komuniteti 
Kultura dhe komuniteti i Perl janë zhvilluar në harmoni me vetë gjuhën.UsenetVendi i parë publik ku u prezantua Perl ishte gjatë rrjedhës së evolucionit të tij, ku komuniteti i Perl u zhvillua me rritjen e shërbimeve të bazuara në internet, duke përfshirë edhe prezantimin e World Wide Web. Komuniteti rreth Perl ishte, në të vërtetë, tema e bisedës së parë të Wall, "State of the Onion". 

"State of the Onion" është termi që përdoret për të përshkruar prezantimet vjetore të Larry Wall rreth zhvillimit të Perl dhe komunitetit të tij. Këto prezantime janë të njohura për humorin e veçantë të Wall, i cili shpesh përfshin referenca nga kultura e Perl, kultura e gjerë e programuesve, sfondi i tij personal dhe gjuhësor, dhe nganjëherë edhe elemente nga jeta e tij familjare dhe besimi i tij kristian. Çdo fjalim mbahet së pari në konferenca të ndryshme të Perl dhe më pas bëhet i disponueshëm në internet.

Në postimet e postës elektronike, Usenet dhe bordit të mesazheve, programet "Just Another Perl hacker" (JAPH) janë një prirje e zakonshme, e krijuar nga Randal L. Schwartz, një nga trajnerët më të hershëm profesionistë të Perl.  Në gjuhën e kulturës Perl, programuesit e Perl njihen si hakerat e Perl, dhe nga kjo rrjedh praktika e shkrimit të programeve të shkurtra për të shtypur shprehjen "Vetëm një tjetër haker Perl    ". Në frymën e konceptit origjinal, këto programe janë mesatarisht të turbullta dhe mjaft të shkurtra për t'u përshtatur në nënshkrimin e një emaili ose mesazhi Usenet. JAPH "kanonike" e zhvilluar nga Schwartz përfshin presjen në fund, megjithëse kjo shpesh hiqet. 

Perl "golf" është aktiviteti i reduktimit të numrit të karaktereve ("goditjet") në një program Perl në minimumin e mundshëm, ashtu siç lojtarët e golfit përpiqen të përdorin sa më pak goditje për të përfunduar një rrugë. e golfit Kërkojnë të bëjnë sa më pak të shtëna në një raund. Përdorimi i parë i frazës [122] nxori në pah ndryshimin midis kodit të këmbësorëve, që synon të mësojë një të sapoardhur, dhe hakimeve të shkurtra që mund të argëtojnë programuesit e përvojë të Perl. Një shembull i këtyre të fundit janë JAPH-të, të cilat janë përdorur tashmë në nënshkrime në postimet e Usenet dhe gjetkë. Marifete të ngjashme kanë qenë një kalim kohe pa emër në gjuhën. APL në dekadat e mëparshme. Përdorimi i Perl për të shkruar një program që kryente kriptim RSA nxiti një interes të përhapur dhe praktik për këtë kalim kohe.  Në vitet e mëvonshme, termi " golf kodi "Është përdorur për argëtim në gjuhë të ndryshme. [123] Një Apokalips i Perl Golf u zhvillua në Konferencën Perl 4.0 në Monterey, Kaliforni, në korrik të vitit 2000.

Ashtu si me gjuhen C, garat kompetitive te kodeve të turbullta ishin një argëtim në fund të viteve 1990. Konkursi i Obfuscated Perl ishte një gare i mbajtur nga The Perl Journal Nga viti 1996 deri në vitin 2000, u bë një virtyt i harkut të fleksibilitetit sintaksor të Perl. Çmimet u ndanë për kategori si "më të fuqishmit" per ato programe që përdorën hapësirën më efikasitet - dhe "nënshkrimi më i mirë në katër rreshta" për programet që përshtateshin në katër rreshta me 76 karaktere në stilin e një ...blloku nënshkrimi Usenet. 

Poezia Perl është praktikë e shkrimit të poezive që mund të përpilohen si kod ligjor Perl, për shembull pjesa e njohur si " Black Perl ". Poezia Perl është bërë e mundur nga numri i madh i fjalëve angleze që përdoren në gjuhën Perl. Poezitë e reja i dorëzohen rregullisht komunitetit në PerlMonks . 

## Shihni gjithashtu 
* Përvijimi i Perl
* Gjuha e të dhënave Perl
* Mjedisi i objektit Perl
* Dokumentacion i thjeshtë i vjetër

## Referime 
## Lexim të mëtejshëm 
* Learning Perl 6th Edition (2011), O'Reilly. Prezantimi i Perl në nivel fillestar.
* Fillimi i Perl 1st Edition (2012), Wrox. Një tutorial fillestar për ata që janë të rinj në programim ose thjesht të rinj në Perl.
* Modern Perl Archived   Botimi i 2-të (2012), Onyx Neon. Përshkruan teknikat moderne të programimit Perl.
* Programimi Perl 4th Edition (2012), O'Reilly. Referenca përfundimtare e Perl.
* Effective Perl Programming Edition 2nd (2010), Addison-Wesley. Udhëzues i nivelit mesatar në të avancuar për të shkruar idiomatike Perl.
* *Libër gatimi Perl* ,  . Shembuj praktik programimi Perl.
* Teknikat e programimit funksional në Perl.

## Lidhje të jashtme