Perl - Perl

Perl
Programming-republic-of-perl.png
ParadigmaÇoklu paradigma: işlevsel, zorunlu, nesne odaklı (sınıfa dayalı ), yansıtıcı
Tarafından tasarlandıLarry Duvarı
GeliştiriciLarry Duvarı
İlk ortaya çıktı18 Aralık 1987; 32 yıl önce (1987-12-18)
Kararlı sürüm
  • 5.32.0[1] / 20 Haziran 2020; 5 ay önce (2020-06-20)
  • 5.30.3[2] / 1 Haziran 2020; 5 ay önce (2020-06-01)
Önizleme sürümü
5.33.4[3] / 20 Kasım 2020; 5 gün önce (2020-11-20)
Yazma disipliniDinamik
Uygulama diliC
işletim sistemiÇapraz platform
LisansArtistik Lisans 1.0[4][5] veya GNU Genel Kamu Lisansı[6]
Dosya adı uzantıları.plx, .pl, .pm, .xs, .t, .pod
İnternet sitesiwww.perl.org
Tarafından etkilenmiş
AWK, TEMEL, C, C ++, Lisp, sed, Unix kabuğu[7]
Etkilenen
CoffeeScript,[kaynak belirtilmeli ] Harika,[kaynak belirtilmeli ] JavaScript, Julia, LPC, PHP, Python, Raku, Yakut, Güç kalkanı

Perl iki kişilik bir aile yüksek seviye, genel amaçlı, yorumlanmış, dinamik programlama dilleri. "Perl" Perl 5'i ifade eder, ancak 2000'den 2019'a kadar yeniden tasarlanan "kardeş dili" olan Perl 6'nın adı resmi olarak değiştirilmeden önce Raku Ekim 2019'da.[8][9]

Perl resmi olarak bir kısaltma olmasa da,[10] çeşitli var arka konuşmalar "Pratik çıkarma ve Raporlama Dili ".[11] Perl başlangıçta Larry Duvarı 1987'de genel amaçlı olarak Unix komut dosyası dili rapor işlemeyi kolaylaştırmak için.[12] O zamandan beri birçok değişiklik ve revizyondan geçti. Raku 2000 yılında Perl 5'in yeniden tasarımı olarak başlayan, sonunda ayrı bir dile dönüştü. Her iki dil de farklı geliştirme ekipleri tarafından bağımsız olarak geliştirilmeye devam ediyor ve birbirinden özgürce fikir alıyor.

Perl dilleri, aşağıdakiler dahil diğer programlama dillerinden özellikler ödünç alır: C, kabuk komut dosyası (sh ), AWK, ve sed;[13] Duvar aynı zamanda TEMEL ve Lisp girişte Perl Öğrenmek (Schwartz & Christiansen) vb.[14] Birçok çağdaş uygulamanın keyfi veri uzunluğu sınırları olmadan metin işleme olanakları sağlarlar. Unix komut satırı araçları,[15] manipülasyonunu kolaylaştırmak metin dosyaları. Perl 5, 1990'ların sonlarında bir CGI komut dosyası oluşturma dil, kısmen eşsiz olması nedeniyle Düzenli ifade ve dizi ayrıştırma yetenekleri.[16][17][18][19]

CGI'ye ek olarak, Perl 5 aşağıdakiler için kullanılır: sistem Yönetimi, ağ programlama finans biyoinformatik ve diğer uygulamalar, örneğin GUI'ler. Esnekliği ve gücü nedeniyle, "İsviçre Ordusu komut dosyası dilleri testere" olarak adlandırılmıştır.[20] ve ayrıca çirkinliği.[21] 1998'de aynı zamanda "Koli Bandı İnternet'i bir arada tutan "hem her yerde hem de bir tutkal dili ve algılanan hoşnutsuzluğu.[22]

Perl oldukça anlamlı programlama dili: belirli bir algoritma için kaynak kodu kısa ve yüksek oranda sıkıştırılabilir olabilir.[23][24]

Tarih

Erken sürümler

Larry Duvarı 1987'de Perl'de programcı olarak çalışırken başladı. Unisys,[15] ve comp.sources.misc için 1.0 sürümünü yayınladı yeni Grup 18 Aralık 1987.[25] Dil, önümüzdeki birkaç yıl içinde hızla genişledi.

1988'de piyasaya sürülen Perl 2, daha iyi bir düzenli ifade motoruna sahipti. 1989'da piyasaya sürülen Perl 3, Ikili veri Canlı Yayınlar.

Başlangıçta, Perl için tek belge tek bir uzundu man sayfası. 1991 yılında Perl Programlama Birçok Perl programcısı tarafından kapağı nedeniyle "Deve Kitabı" olarak bilinen, yayınlandı ve fiili dil için referans. Aynı zamanda, Perl sürüm numarası, dilde büyük bir değişikliği işaretlemek için değil, kitap tarafından iyi bir şekilde belgelenen sürümü belirlemek için 4'e yükseltildi.

Erken Perl 5

Perl 4 bir dizi bakım sürümleri, 1993 yılında Perl 4.036 ile doruğa ulaşan Wall, Perl 5 üzerinde çalışmaya başlamak için Perl 4'ü terk etti. Perl 5'in ilk tasarımı 1994'e kadar devam etti. perl5-taşıyıcılar mail listesi Perl 5'in farklı platformlara taşınması çalışmalarını koordine etmek için Mayıs 1994'te kuruldu. Perl 5'in geliştirilmesi, bakımı ve taşınması için birincil forum olmaya devam ediyor.[26]

Perl 5.000, 17 Ekim 1994'te piyasaya sürüldü.[27] Neredeyse tamamen yeniden yazılmıştır. çevirmen ve dile birçok yeni özellik ekledi. nesneler, Referanslar, sözcüksel (benim) değişkenler, ve modüller. Daha da önemlisi, modüller, tercümanı değiştirmeden dili genişletmek için bir mekanizma sağladı. Bu, sıradan Perl programcılarının yeni dil özellikleri eklemesini sağlasa bile, çekirdek yorumlayıcının kararlı hale gelmesine izin verdi. Perl 5 o zamandan beri aktif olarak geliştirilmektedir.

Perl 5.001, 13 Mart 1995'te piyasaya sürüldü. Perl 5.002, yeni prototip özelliği ile 29 Şubat 1996'da piyasaya sürüldü. Bu, modül yazarlarının alt programlar Perl gibi davrandı yerleşikler. Perl 5.003, 25 Haziran 1996'da güvenlik yayını olarak yayınlandı.

Perl 5 tarihindeki en önemli olaylardan biri, dilin dışında gerçekleşti ve modül desteğinin bir sonucuydu. 26 Ekim 1995'te Kapsamlı Perl Arşiv Ağı (CPAN) bir depo Perl dili için ve Perl modülleri; Mayıs 2017 itibarıyla, 35.190 dağıtımda 185.178'den fazla modül taşır, 13.071'den fazla yazar tarafından yazılır ve dünya çapında 245'ten fazla yerde yansıtılmaktadır.[28]

Perl 5.004, 15 Mayıs 1997'de piyasaya sürüldü ve diğer şeylerin yanı sıra, Perl'e bir temel nesne veren UNIVERSAL paketini de içeriyordu. sınıflar otomatik olarak türetildi ve modül sürümlerini gerektirme yeteneği. Bir diğer önemli gelişme, CGI.pm modül[29] Perl'in popülaritesine katkıda bulunan CGI betik dili.[30]

Perl 5.004 ayrıca aşağıdakiler için destek ekledi: Microsoft Windows ve diğer birkaç işletim sistemi.[29]

Perl 5.005, 22 Temmuz 1998'de piyasaya sürüldü. Bu sürüm, normal ifade motor, arka uca yeni kancalar aracılığıyla B :: * modüller, qr // regex alıntı operatörü, diğer yeni çekirdek modüllerin geniş bir seçimi ve aşağıdakiler de dahil olmak üzere birkaç daha fazla işletim sistemi için destek eklendi BeOS.[31]

2000–2020

Ana sürüm[32]Son Güncelleme[33]
Eski versiyon, artık korunmuyor: 5.0041999-04-29
Eski versiyon, artık korunmuyor: 5.0051999-03-28
Eski versiyon, artık korunmuyor: 5.62003-11-15
Eski versiyon, artık korunmuyor: 5.82008-12-14
Eski versiyon, artık korunmuyor: 5.102009-08-22
Eski versiyon, artık korunmuyor: 5.122012-11-10
Eski versiyon, artık korunmuyor: 5.142013-03-10
Eski versiyon, artık korunmuyor: 5.162013-03-11
Eski versiyon, artık korunmuyor: 5.182014-10-01
Eski versiyon, artık korunmuyor: 5.202015-09-12
Eski versiyon, artık korunmuyor: 5.222017-07-15
Eski versiyon, artık korunmuyor: 5.242018-04-14
Eski versiyon, artık korunmuyor: 5.262018-11-29
Eski versiyon, artık korunmuyor: 5.282020-06-01
Eski sürüm, ancak yine de korunuyor: 5.302020-06-01
Mevcut kararlı sürüm: 5.322020-06-20
Gelecek sürüm: 7.02021-2022?
Gösterge:
Eski versiyon
Eski sürüm, hala korunuyor
Mevcut kararlı sürüm
En son önizleme sürümü
Gelecek sürüm

Perl 5.6, 22 Mart 2000'de yayınlandı. Önemli değişiklikler dahil 64 bit destek, Unicode dize gösterimi, 2 GiB üzerindeki dosyalar için destek ve "bizim" anahtar kelimemiz.[34][35] Perl 5.6 geliştirilirken, versiyon oluşturma diğer açık kaynak projelerine benzer bir şema; 5.005_63'ten sonra, geliştirme sürümlerinin tek sayılara ve kararlı sürümlerin çift sayılara sahip olması planlarıyla bir sonraki sürüm 5.5.640 oldu.

Wall, 2000 yılında topluluktan Perl'in yeni bir sürümü için öneriler için bir çağrı yaptı. Süreç, Perl 6'nın geliştirilmesine rehberlik etmek için kullanılacak 361 RFC (yorum talebi) dokümanı ile sonuçlandı. 2001 yılında,[36] Perl 6 için, değişiklik taleplerini özetleyen ve gelecek nesil Perl'in tasarımını sunan bir dizi belge olan "Kıyamet" üzerine çalışmalar başladı. Resmi bir belge yerine RFC'lerin bir özeti olarak sunuldular. Bu noktada Perl 6 yalnızca bir dilin tanımı olarak var oldu.

Perl 5.8 ilk olarak 18 Temmuz 2002'de piyasaya sürüldü ve o zamandan beri neredeyse yıllık güncellemeleri yapıldı. Perl 5.8, Unicode desteğini iyileştirdi, yeni bir G / Ç uygulaması ekledi, yeni bir iş parçacığı uygulaması, iyileştirilmiş sayısal doğruluk ve birkaç yeni modül ekledi.[37] 2013 itibariyle bu sürüm hala Perl'in en popüler sürümü olmaya devam ediyor ve Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 ve AIX 5 tarafından kullanılıyor.

2004 yılında, Kıyametleri orijinal olarak özetleyen, ancak Perl 6 dilinin özelliği haline gelen "Özetler" üzerinde çalışma başladı. Şubat 2005'te, Audrey Tang üzerinde çalışmaya başladı Puglar bir Perl 6 tercümanı Haskell.[38] Bu, Perl 6'yı gerçeğe dönüştürmek için yapılan ilk ortak çabaydı. Bu çaba 2006'da durdu.[39]

Perl 1.0'ın 20. yıl dönümü olan 18 Aralık 2007'de Perl 5.10.0 yayınlandı. Perl 5.10.0, onu Perl 6'ya yaklaştıran dikkate değer yeni özellikler içeriyordu. anahtar deyimi ("verildi" / "ne zaman" olarak adlandırılır), düzenli ifadeler güncellemeleri ve 'akıllı maç operatörü (~~).[40][41]Aynı zamanda, Perl 6'nın başka bir uygulamasında ciddi bir gelişme başladı. Rakudo Perl ile birlikte geliştirildi Parrot sanal makine. Kasım 2009 itibariyle Rakudo Perl, düzenli aylık sürümlere sahip oldu ve şimdi Perl 6'nın en eksiksiz uygulaması.

Perl 5'in geliştirme sürecinde önemli bir değişiklik Perl 5.11 ile gerçekleşti; geliştirme topluluğu, yıllık kararlı sürümler çizelgesiyle birlikte aylık geliştirme sürümleri yayın döngüsüne geçti. Bu plana göre, hata düzeltme noktası sürümleri, her üç ayda bir kararlı sürümleri takip edecektir.

12 Nisan 2010'da Perl 5.12.0 yayınlandı. Önemli temel geliştirmeler arasında yeni paket ADI VERSION sözdizimi, Yada Yada operatörü (henüz uygulanmamış yer tutucu kodunu işaretleme amaçlı), örtük kısıtlamalar, tam Y2038 uyumluluk, normal ifade dönüştürme aşırı yükleme, DTrace destek ve Unicode 5.2.[42] 21 Ocak 2011'de Perl 5.12.3 yayınlandı; güncellenmiş modülleri ve bazı belge değişikliklerini içerir.[43] Sürüm 5.12.4 20 Haziran 2011'de yayınlandı. Bu dalın son sürümü olan 5.12.5, 10 Kasım 2012'de yayınlandı.

14 Mayıs 2011'de Perl 5.14 yayınlandı. JSON desteği 5.14.0'dan itibaren yerleşiktir.[44] Bu şubenin son sürümü olan 5.14.4, 10 Mart 2013 tarihinde yayınlandı.

20 Mayıs 2012'de Perl 5.16 yayınlandı. Dikkate değer yeni özellikler arasında, taklit etmek istediği belirli bir Perl sürümünü belirleme, kullanıcıların Perl sürümlerini yükseltmelerine, ancak yine de normalde uyumsuz olan eski komut dosyalarını çalıştırmalarına izin verme yeteneği bulunmaktadır.[45] Perl 5.16 ayrıca çekirdeği desteklemek için günceller Unicode 6.1.[45]

18 Mayıs 2013'te Perl 5.18 yayınlandı. Dikkate değer yeni özellikler arasında yeni dtrace kancaları, sözcük altları, daha fazla CORE :: subs, güvenlik nedeniyle hash revizyonu, Unicode 6.2 desteği bulunmaktadır.[46]

27 Mayıs 2014'te Perl 5.20 yayınlandı. Dikkate değer yeni özellikler arasında alt yordam imzaları, karma dilimler / yeni dilim sözdizimi, tutarlı rasgele sayı üreteci kullanan sonek başvurusu kaldırma (deneysel), Unicode 6.3, rand () bulunur.[47]

Bazı gözlemciler, Modern Perl hareketinin başlamasıyla birlikte Perl 5.10'un piyasaya sürüldüğüne inanıyorlar.[48] Özellikle, bu cümle, CPAN'ın kullanımını kucaklayan, dildeki son gelişmelerden yararlanan ve yüksek kaliteli kod oluşturma konusunda titiz bir geliştirme tarzını tanımlamaktadır.[49] "Modern Perl" kitabı[50] bu fikrin en görünür standart taşıyıcısı olabilir, Aydınlanmış Perl Organizasyonu gibi diğer gruplar[51] nedeni ele aldı.

2012'nin sonlarında ve 2013'te, Perl 5 için alternatif uygulamalar için birkaç proje başladı: Perl5 Perl6 Rakudo Perl ekibi tarafından,[52] Moe Stevan Little ve arkadaşları tarafından,[53] s2[54] Reini Urban yönetimindeki Perl11 ekibi tarafından, gperl goccy tarafından,[55] ve rperl Will Braswell liderliğindeki ve Perll11 projesine bağlı bir kickstarter projesi.[56]

2020 sonrası

Haziran 2020'de Perl 7 Perl 5'in halefi ilan edildi [57]. Perl 7, başlangıçta Perl 5.32'yi temel alacak ve 2020'nin ilerleyen günlerinde sürüm adaylarının çıkması bekleniyor. [58]. Perl 7 piyasaya sürüldüğünde, Perl 5 uzun vadeli bakıma girecek. Desteklenen Perl 5 sürümleri, ancak önemli güvenlik ve hata düzeltmeleri almaya devam edecek [59].

PONIE

PONIE Perl On New Internal Engine'in kısaltmasıdır. PONIE Projesi 2003'ten 2006'ya kadar sürdü ve Perl 5 ile Perl 6 arasında bir köprü olacaktı. Perl 5 tercümanı üzerinde çalışmak üzere yeniden yazma çabasıydı. Papağan, Perl 6 sanal makine. Hedef, dünyadaki binlerce şirkette milyonlarca satır Perl 5 kodunun geleceğini sağlamaktı.[60]

PONIE projesi 2006'da sona erdi ve artık aktif olarak geliştirilmiyor. PONIE'nin bir parçası olarak Perl 5 yorumlayıcısında yapılan iyileştirmelerin bir kısmı bu projeye dahil edildi.[61]

İsim

Perl, başlangıçta "Pearl" olarak adlandırıldı. Wall, dile olumlu çağrışımlar içeren kısa bir isim vermek istedi; sözlükteki her üç ve dört harfli kelimeyi dikkate aldığını iddia ediyor. Ayrıca karısı Gloria'nın adını vermeyi düşündü. Duvar var olanı keşfetti İNCİ Perl'in resmi sürümünden önce programlama dili ve adın yazılışını değiştirdi.[62]

Dile atıfta bulunurken, ad normalde büyük harfle yazılır (Perl) uygun bir isim olarak. Tercüman programının kendisine atıfta bulunulurken, ad genellikle büyük harfsizdir (perl) çünkü Unix benzeri dosya sistemlerinin çoğu büyük / küçük harfe duyarlıdır. İlk baskısının yayınlanmasından önce Perl Programlama, dile şu şekilde atıfta bulunmak yaygındı: perl; Randal L. Schwartz ancak, dizgide daha iyi öne çıkması için kitaptaki dilin adını büyük harfle yazdı. Bu vaka ayrımı daha sonra kanonik olarak belgelendi.[63]

Ad bazen şu şekilde genişletilir: Pratik Çıkarma ve Rapor Diliama bu bir backronym.[64] Diğer genişletmeler, Wall'inki de dahil olmak üzere eşit derecede kanonik olarak önerildi Patolojik Olarak Eklektik Çöp Listesi hangisi içinde kılavuz sayfası perl için.[65] Nitekim Wall, adın birçok farklı açılımı teşvik etmeyi amaçladığını iddia ediyor.[66]

Deve sembolü

O'Reilly Media tarafından kullanılan Deve sembolü

Perl Programlama, tarafından yayınlandı O'Reilly Media bir resmini içerir tek hörgüçlü deve kapağında yer alır ve genellikle "Deve Kitabı" olarak adlandırılır.[67] Bir devenin bu görüntüsü Perl'in resmi olmayan bir sembolü ve bir general haline geldi. bilgisayar korsanı amblem, tişörtlerde ve diğer giyim eşyalarında görülür.

O'Reilly, resmin sahibi marka ama bunun için lisans veriyor ticari olmayan yalnızca bir onay ve www.perl.com'a bir bağlantı gerektiren kullanım. Ticari kullanım lisansına duruma göre karar verilir.[68] O'Reilly ayrıca ticari olmayan siteler için "Programlama Cumhuriyeti Perl" logoları ve Perl kullanan herhangi bir site için "Powered by Perl" düğmeleri sağlar.[68]

Soğan sembolü

The Perl Foundation tarafından kullanılan soğan logosu

Perl Vakfı yan kuruluşlarına lisans verdiği alternatif bir sembole, bir soğana sahiptir, Perl Mongers, PerlMonks, Perl.org ve diğerleri.[69] Sembol bir görsel kelime oyunu açık inci soğanı.[70]

Raptor sembolü

Alternatif Perl 5 Logosu

Sebastian Riedel, yaratıcısı Mojolicious, tasvir eden bir logo oluşturdu raptor dinozor, CC-SA Lisansı Sürüm 4.0 altında mevcuttur.[71] Logo yeniden karıştırılıyor ve farklı yerlerde kullanılıyor ve Perl 5'i simgeliyor. Raptor analogu, Matt S Trout tarafından 2010'da başlayan bir dizi konuşmadan geliyor.[72] Görüşmeler, Perl 6'nın gündemde olduğu bir dönemde daha Perl 5 toplum merkezli olmayı hedefliyordu.

Genel Bakış

Wall'a göre Perl'in iki sloganı var. İlk olarak "Bunu yapmanın birden fazla yolu var, "Yaygın olarak TMTOWTDI olarak bilinir. İkinci slogan" Kolay şeyler kolay olmalı ve zor şeyler mümkün olmalıdır ".[15]

Özellikleri

Perl'in genel yapısı genel olarak C'den türemiştir. Perl, prosedürel doğada değişkenler, ifade, atama ifadeleri, destek -sınırlı bloklar, Kontrol Yapıları, ve alt programlar.

Perl ayrıca kabuk programlamadan da özellikler alır. Tüm değişkenler satır aralığı ile işaretlenmiştir işaretler değişkenlere izin veren enterpolasyonlu doğrudan içine Teller. Bununla birlikte, kabuktan farklı olarak, Perl değişkenlere tüm erişimlerde işaretler kullanır ve sigil kullanan diğer programlama dillerinin çoğunun aksine, işaret değişkenin türünü değil, ifadenin türünü belirtir. Örneğin, bir değerler listesine erişmek için karma, bir için işaret dizi Karma işareti ("%") değil ("@") kullanılır. Perl ayrıca, kabuk programlamada sıklıkla kullanılan araçları sağlayan birçok yerleşik işleve sahiptir (bu araçların çoğu, kabuğun dışındaki programlar tarafından uygulanmaktadır) ) gibi sıralama ve arıyor işletim sistemi tesisleri.

Perl alır listeler itibaren Lisp, karmalar ("ilişkilendirilebilir diziler") AWK, ve düzenli ifadeler itibaren sed. Bunlar, birçok ayrıştırma, metin işleme ve veri yönetimi görevini basitleştirir ve kolaylaştırır. Ayrıca Lisp ile paylaşılan örtük dönüş bir bloktaki son değerin ve tüm ifadelerin bir değere sahip olduğu ve dolayısıyla aynı zamanda ifadeler olduğu ve daha büyük ifadelerde kullanılabileceği gerçeği.

Perl 5, kompleksi destekleyen özellikler ekledi veri yapıları, birinci sınıf işlevler (yani, kapanışlar değerler olarak) ve nesne yönelimli bir programlama modeli. Bunlar arasında Referanslar, paketler, sınıfa dayalı yöntem gönderimi, ve sözcük kapsamlı değişkenler, ile birlikte derleyici yönergeleri (örneğin, katı pragma). Perl 5 ile sunulan önemli bir ek özellik, kodu yeniden kullanılabilir modüller olarak paketleme yeteneğiydi. Wall daha sonra "Perl 5'in modül sisteminin amacının Perl çekirdeğinden çok Perl kültürünün büyümesini teşvik etmek olduğunu" belirtti.[73]

Perl'in tüm sürümleri otomatik veri yazma ve otomatik hafıza yönetimi. Tercüman türü bilir ve depolama programdaki her veri nesnesinin gereksinimleri; Gerektiğinde kullanarak onlar için depolama alanı tahsis eder ve serbest bırakır referans sayma (böylece tahsisi kaldıramaz dairesel veri yapıları manuel müdahale olmadan). Yasal tür dönüşümleri - örneğin, sayıdan dizeye dönüşümler - otomatik olarak yapılır Çalışma süresi; yasadışı tür dönüştürmeleri ölümcül hatalardır.

Tasarım

Perl'in tasarımı, bilgisayar endüstrisindeki üç geniş eğilime bir yanıt olarak anlaşılabilir: düşen donanım maliyetleri, artan işçilik maliyetleri ve derleyici teknoloji. Gibi birçok eski bilgisayar dili Fortran ve C, pahalı bilgisayar donanımını verimli kullanmayı amaçladı. Bunun aksine Perl, bilgisayar programcılarının programları daha hızlı ve kolay yazabilmesi için tasarlandı.

Perl, programcının görevini daha büyük bir maliyetle kolaylaştıran birçok özelliğe sahiptir. İşlemci ve hafıza gereksinimleri. Bunlar arasında otomatik bellek yönetimi; dinamik yazım; dizeler, listeler ve karmalar; düzenli ifadeler; iç gözlem; ve bir eval () işlevi. Perl, "yerleşik sınır yok" teorisini izler.[67] benzer bir fikir Zero One Infinity kural.

Wall, bir dilbilimci olarak eğitildi ve Perl'in tasarımı, dilbilimsel prensipler. Örnekler şunları içerir: Huffman kodlama (ortak yapılar kısa olmalıdır), iyi nihai ağırlıklandırma (önemli bilgiler önce gelmelidir) ve geniş bir dil ilkelleri. Perl, Perl yorumlayıcısını karmaşıklaştırsalar bile insanların yazması için özlü ve doğal olan dil yapılarını tercih eder.

Perl's sözdizimi "farklı olan şeylerin farklı görünmesi gerektiği" fikrini yansıtır.[74] Örneğin, skalarlar, diziler ve karmalar farklı öncü işaretlere sahiptir. Dizi dizinleri ve karma anahtarlar farklı türlerde küme parantezi kullanır. Dizeler ve normal ifadeler farklı standart sınırlayıcılara sahiptir. Bu yaklaşım, aşağıdaki gibi bir dil ile karşılaştırılabilir: Lisp, aynı temel sözdiziminin basit ve evrenselden oluştuğu sembolik ifadeler, tüm amaçlar için kullanılır.

Perl herhangi bir belirli programlama paradigması (prosedürel, nesne odaklı, işlevsel veya diğerleri) veya programcının aralarında seçim yapmasını gerektirebilir.

Hem Perl diline hem de onu çevreleyen topluluk ve kültüre yönelik geniş bir pratik eğilim vardır. Önsöz Perl Programlama başlar: "Perl, işinizi halletmek için kullanılan bir dildir."[15] Bunun bir sonucu, Perl'in düzenli bir dil olmamasıdır. Birçok özelliği içerir, kurallarının istisnalarına tolerans gösterir ve Sezgisel sözdizimsel belirsizlikleri çözmek için. Derleyicinin bağışlayıcı doğası nedeniyle, bazen böcek bulmak zor olabilir. Perl'in işlev dokümantasyonu, liste ve skaler bağlamlardaki yerleşik işlevlerin değişken davranışları hakkında "Genel olarak, tutarlılık istemediğiniz sürece, istediğinizi yaparlar" diyerek sözler.[75]

Yazılı değil Şartname veya Perl dili için standart, Perl 5 üzerinden Perl sürümleri için mevcuttur ve Perl'in mevcut sürümü için bir tane oluşturma planı yoktur. Tercümanın yalnızca bir uygulaması vardı ve dil onunla birlikte gelişti. Bu tercüman, fonksiyonel testleri ile birlikte, fiili dilin özellikleri. Perl 6, ancak bir şartname ile başladı,[76] ve birkaç proje[77] şartnamenin bir kısmını veya tamamını uygulamayı hedefleyin.

Başvurular

Perl, birçok standart ve üçüncü şahıs modülünün mevcudiyetiyle birleştirilmiş birçok ve çeşitli uygulamalara sahiptir.

Perl esas olarak yazmak için kullanılmıştır CGI komut dosyaları: Perl ile yazılmış büyük projeler şunları içerir cPanel, Yırtmaç, Bugzilla, RT, TWiki, ve Taşınabilir tür; Perl'i yoğun olarak kullanan yüksek trafikli web siteleri şunları içerir: Priceline.com, Craigslist,[78] IMDb,[79] LiveJournal, DuckDuckGo,[80][81] Slashdot ve Ticketmaster. Aynı zamanda popüler olanın isteğe bağlı bir bileşenidir. LAMBA teknoloji yığını web Geliştirme yerine PHP veya Python. Perl, yaygın olarak bir sistem programlama dili içinde Debian GNU / Linux dağıtımı.[82]

Perl genellikle bir tutkal dili, birlikte çalışmak üzere özel olarak tasarlanmamış sistemleri ve arabirimleri birbirine bağlayarak ve "veri parçalama,"[83] yani, rapor oluşturma gibi görevler için büyük miktarda veriyi dönüştürmek veya işlemek. Aslında, bu güçlü yönler yakından bağlantılıdır. Kombinasyon, Perl'i popüler ve çok amaçlı bir dil yapar sistem yöneticileri özellikle kısa programların genellikle "tek astarlı programlar, "girilebilir ve tek bir Komut satırı.

Perl kodu, her yerde taşınabilir hale getirilebilir pencereler ve Unix; bu tür bir kod genellikle yazılım tedarikçileri tarafından kullanılır (her ikisi de COTS ve ısmarlama) yazılım oluşturma ve dağıtım komut dosyalarının paketlenmesini ve bakımını basitleştirmek için.

Grafik kullanıcı arayüzleri (GUI'ler) Perl kullanılarak geliştirilebilir. Örneğin, Perl / Tk ve wxPerl Perl betikleri ile kullanıcı etkileşimini etkinleştirmek için yaygın olarak kullanılır. Bu tür bir etkileşim, aşağıdakiler kullanılarak senkronize veya asenkron olabilir: geri aramalar GUI'yi güncellemek için.

Uygulama

Perl, Perl ve C'de yazılmış geniş bir modül koleksiyonuyla birlikte C dilinde yazılmış bir çekirdek yorumlayıcı olarak uygulanmaktadır. 2010 itibariyleyorumlayıcı 150.000 satır C kodudur ve tipik makine mimarilerinde 1 MB çalıştırılabilir bir dosyada derler. Alternatif olarak, yorumlayıcı bir bağlantı kitaplığında derlenebilir ve diğer programlara gömülebilir. Dağıtımda, 200.000 satır Perl ve ek olarak 350.000 satır C kodu içeren yaklaşık 500 modül vardır (modüllerdeki C kodunun çoğu, karakter kodlaması tablolar).

Tercümanın nesneye yönelik bir mimarisi vardır. Perl dilinin tüm öğeleri - skalarlar, diziler, hashler, coderefs, dosya tutamaçları - tercümanda şu kişiler tarafından temsil edilir: C yapıları. Bu yapılar üzerindeki işlemler geniş bir koleksiyonla tanımlanır. makrolar, daktilo ve işlevler; bunlar Perl C'yi oluşturur API. Perl API, yeni başlayanlar için şaşırtıcı olabilir, ancak giriş noktaları tutarlı bir adlandırma şeması, onu kullananlara rehberlik eden.

Bir Perl yorumlayıcısının ömrü, genel olarak bir derleme aşamasına ve bir çalıştırma aşamasına bölünür.[84] Perl'de aşamalar tercümanın yaşam döngüsündeki ana aşamalardır. Her yorumlayıcı her aşamadan yalnızca bir kez geçer ve aşamalar sabit bir sırayla izler.

Perl'in derleme aşamasında olanların çoğu derlemedir ve Perl'in çalıştırma aşamasında olanların çoğu yürütmedir, ancak önemli istisnalar vardır. Perl, derleme aşamasında Perl kodunu çalıştırma yeteneğinden önemli ölçüde yararlanır. Perl ayrıca derlemeyi çalıştırma aşamasına erteleyecektir. Herhangi bir anda gerçekten meydana gelen işlem türünü gösteren terimler şunlardır: Derleme zamanı ve Çalışma süresi. Perl, derleme aşamasında çoğu noktada derleme süresindedir, ancak derleme süresi çalıştırma aşamasında da girilebilir. Bir dizge bağımsız değişkenindeki kodun derleme zamanı değerlendirme yerleşik çalışma aşamasında gerçekleşir. Perl genellikle derleme aşamasında çalışma zamanında bulunur ve çalıştırma aşamasının çoğunu çalıştırma süresinde geçirir. Kod BAŞLA bloklar çalışma zamanında ancak derleme aşamasında yürütülür.

Derleme zamanında, yorumlayıcı Perl kodunu bir sözdizimi ağacı. Çalışma zamanında, programı şu şekilde yürütür: ağaçta yürümek. Metin yalnızca bir kez ayrıştırılır ve sözdizimi ağacı yürütülmeden önce optimizasyona tabi tutulur, böylece yürütme nispeten verimli olur. Sözdizimi ağacındaki derleme zamanı optimizasyonları şunları içerir: sabit katlama ve bağlam yayılımı, ancak gözetleme deliği optimizasyonu da yapılır.

Perl'de Turing tamamlandı dilbilgisi çünkü ayrıştırma, derleme aşamasında çalıştırılan çalışma zamanı kodundan etkilenebilir.[85] Bu nedenle, Perl bir düz ile ayrıştırılamaz Lex /Yacc Lexer /ayrıştırıcı kombinasyon. Bunun yerine, yorumlayıcı, değiştirilmiş bir ile koordine eden kendi sözlüğünü uygular. GNU bizonu dildeki belirsizlikleri çözmek için ayrıştırıcı.

Sıklıkla "Yalnızca perl Perl'i ayrıştırabilir" denilir.[86] sadece Perl yorumlayıcısının (perl) Perl dilini ayrıştırabilir (Perl), ancak bu bile genel olarak doğru değildir. Perl yorumlayıcısı, derleme aşamasında bir Turing makinesini simüle edebildiğinden, durdurma sorunu her durumda ayrıştırmayı tamamlamak için. Durdurma sorununun karar verilemez olduğu ve bu nedenle perl bile Perl'i her zaman çözümleyemeyeceği uzun süredir devam eden bir sonuçtur. Perl, kullanıcıya kendi derleme aşamasında tam programlama gücüne erişim sağlama konusunda alışılmadık bir seçim yapar. Teorik saflık açısından maliyet yüksektir, ancak pratik rahatsızlık nadir görünmektedir.

Perl'i ayrıştırmayı üstlenen diğer programlar, örneğin kaynak kodu analizörler ve otomatik girintiler, sadece belirsiz olanlarla uğraşmak zorunda değil sözdizimsel yapılar ama aynı zamanda kararsızlık Genel durumda Perl ayrıştırma. Adam Kennedy PPI projesi, Perl'i çalıştırılabilir kod olarak ayrıştırmak yerine (Perl'in bile her zaman yapamayacağı) Perl kodunu bir belge olarak ayrıştırmaya (bir belge olarak bütünlüğünü koruyarak) odaklandı. Kennedy, "ayrıştırmada Perl'in acı çekiyor"durdurma sorunu ',"[87] bu daha sonra kanıtlandı.[88]

Perl 250.000'den fazla fonksiyonel testler çekirdek Perl dili için ve çekirdek modüller için 250.000'den fazla işlevsel test. Bunlar, normal oluşturma sürecinin bir parçası olarak çalışır ve yorumlayıcı ve çekirdek modüllerini kapsamlı bir şekilde kullanır. Perl geliştiricileri, yorumlayıcıdaki değişikliklerin ortaya çıkmamasını sağlamak için işlevsel testlere güvenirler. yazılım hataları; ayrıca, tercümanın kendi sistemlerinde işlevsel testlerden geçtiğini gören Perl kullanıcıları, düzgün çalıştığına dair yüksek derecede güvene sahip olabilirler.

Kullanılabilirlik

Perl çift ​​lisanslı ikisinin altında Artistik Lisans 1.0[4][5] ve GNU Genel Kamu Lisansı.[6] Dağıtımların çoğu için mevcuttur işletim sistemleri. Özellikle Unix ve Unix benzeri sistemler, ancak çoğu modern (ve çoğu eski) platforma taşınmıştır. Sadece altı ile[kaynak belirtilmeli ] bildirilen istisnalar, Perl derlenebilir kaynak kodu hepsinde POSIX -uyumlu veya başka türlü-Unix uyumlu platformlar.[89]

Olağandışı değişiklikler nedeniyle klasik Mac OS ortam, MacPerl adlı özel bir bağlantı noktası bağımsız olarak sevk edildi.[90]

Kapsamlı Perl Arşiv Ağı her birinde bulunan dağıtımlara bağlantılar içeren desteklenen platformların tam bir listesini içerir.[91] CPAN ayrıca çekirdek Perl dağıtımının bir parçası olmayan halka açık Perl modülleri için kaynaktır.

pencereler

Kullanıcıları Microsoft Windows genellikle Perl for Win32'nin yerel ikili dağıtımlarından birini kurun, en yaygın olarak Çilek Perl veya ActivePerl. Perl'den derleniyor kaynak kodu Windows altında mümkündür, ancak çoğu kurulum gerekli C derleyicisine ve yapı araçlarına sahip değildir. Bu aynı zamanda CPAN'dan, özellikle kısmen C'de yazılmış olan modüllerin kurulumunu zorlaştırır.

ActivePerl kapalı kaynak dağıtımı ActiveState çekirdek Perl sürümlerini izleyen düzenli sürümleri olan.[92] Dağıtım önceden şunları içeriyordu: Perl paket yöneticisi (PPM),[93] Yaygın Perl modüllerinin yüklenmesi, kaldırılması, yükseltilmesi ve kullanımının yönetilmesi için popüler bir araç, ancak bu araç ActivePerl 5.28'den itibaren kullanımdan kaldırıldı.[94] Şunlar da dahildir: PerlScript, bir Windows Komut Dosyası Ana Bilgisayarı Perl dilini uygulayan (WSH) motoru. Görsel Perl Visual Studio .NET geliştirme paketine Perl ekleyen bir ActiveState aracıdır. Bir VBScript Perl dönüştürücüsünün yanı sıra Windows için bir Perl derleyicisi ve awk ve sed Perl için de bu şirket tarafından üretilmiş ve Windows için ActiveState CD'si, tüm dağıtımlarını ve ayrıca Komodo IDE ve 2002'de Unix / Linux / Posix varyantının ilki hariç tümü ve ardından.[95]

Çilek Perl Windows için açık kaynaklı bir dağıtımdır. Ocak 2008'den bu yana, geri bildirimler ve talepler geldikçe yeni modüller de dahil olmak üzere düzenli olarak üç ayda bir yayımlandı. Strawberry Perl, XS modüllerini derlemek de dahil olmak üzere diğer platformlara standart Perl dağıtımları gibi modülleri kurmayı hedefliyor.

Cygwin öykünme katmanı Perl'i Windows altında çalıştırmanın başka bir yoludur. Cygwin, Windows'ta Unix benzeri bir ortam sağlar ve hem Perl hem de CPAN, Cygwin kurulum programında standart önceden derlenmiş paketler olarak mevcuttur. Cygwin ayrıca şunları içerir: gcc Perl'i kaynaktan derlemek de mümkündür.

Bir perl yürütülebilir dosyası, diğer komut dosyası oluşturma araçlarıyla birlikte dizindeki çeşitli Windows Kaynak setlerinde bulunur.

Perl uygulamaları, MKS Araç Seti, Interix (önceki uygulamaların temeli Unix için Windows Hizmetleri ), ve SEN KAZANDIN.

Veritabanı arayüzleri

Perl'in metin işleme yetenekleri oluşturmak için kullanılabilir SQL sorguları; diziler, karmalar ve otomatik bellek yönetimi, döndürülen verilerin toplanmasını ve işlenmesini kolaylaştırır. Örneğin, Tim Bunce'nin Perl DBI uygulama programlama Arayüzü (API), API argümanları SQL sorgularının metni olabilir; bu nedenle aynı anda birden fazla dilde programlamak mümkündür (örneğin, bir web sayfası kullanma HTML, JavaScript ve SQL'de burada belge ). Perl kullanımı değişken enterpolasyon SQL sorgularının her birini programlı olarak özelleştirmek ve Perl dizilerinin veya hash'lerin özelliklerini programlı olarak tutmak için yapılar olarak veri setleri her SQL sorgusundan, bir Perl alt programı tarafından sonradan işlenmek üzere büyük miktarda veriyi işlemek için üst düzey bir mekanizma sağlar.[96]Perl'in ilk sürümlerinde, yorumlayıcı ile bir müşteri tarafı veritabanı kitaplığı. Bu yeterince zordu, en önemli ve en yaygın kullanılan veritabanlarından yalnızca birkaçı için yapıldı ve ortaya çıkan perl bir seferde yalnızca bir veritabanı arayüzü kullanılarak çalıştırılabilir.

Perl 5'te, veritabanı arayüzleri şu şekilde gerçekleştirilir: Perl DBI modüller. DBI (Veritabanı Arayüzü) modülü Perl uygulamalarına tek bir veritabanından bağımsız arayüz sunarken, DBD (Veritabanı Sürücüsü) modülleri yaklaşık 50 farklı veritabanına erişimin ayrıntılarını ele alır; çoğu için DBD sürücüleri var ANSI SQL veritabanları.

DBI, veritabanı tanıtıcıları ve sorguları için önbelleğe alma sağlar ve bu, uzun ömürlü yürütme ortamlarında performansı büyük ölçüde artırabilir. mod perl,[97] yüksek hacimli sistemlerin yük artışlarını önlemesine yardımcı olmak Slashdot etkisi.

Modern Perl uygulamalarında, özellikle kullanılarak yazılanlar web çerçeveleri gibi Katalizör DBI modülü genellikle dolaylı olarak kullanılır. nesne ilişkisel eşleyiciler gibi DBIx :: Sınıf, Sınıf :: DBI[98] veya Rose :: DB :: Object[99] SQL sorguları oluşturan ve verileri uygulama yazarına şeffaf bir şekilde işleyen.

Karşılaştırmalı performans

Bilgisayar Dili Benchmark Oyunu çeşitli programlama dillerinde tipik programlama problemlerinin uygulamalarının performansını karşılaştırır.[100] Sunulan Perl uygulamaları tipik olarak bellek kullanım spektrumunun en üst noktasına doğru performans gösterir ve çeşitli hız sonuçları verir. Perl'in kıyaslama oyunundaki performansı, yorumlanmış diller için tipiktir.[101]

Büyük Perl programları, derlenen dillerdeki benzer programlardan daha yavaş başlar çünkü perl her çalıştığında kaynağı derlemek zorundadır. Bir konuşmada YAPC :: Avrupa 2005 Konferansı ve sonraki makalesi "Zamanında Başlayın" Jean-Louis Leroy, Perl yorumlayıcısının aşırı geniş dahil etme yolu içindeki modülleri bulmak için önemli ölçüde zaman harcadığı için Perl programlarının çalıştırılmasının beklenenden çok daha uzun sürdüğünü buldu.[102] Java, Python ve Ruby'den farklı olarak, Perl yalnızca ön derleme için deneysel desteğe sahiptir.[103] Bu nedenle Perl programları, her yürütmede bu genel masraf cezasını öder. Tipik programların çalışma aşaması yeterince uzundur. itfa edilmiş başlatma süresi önemli değildir, ancak çok kısa yürütme sürelerini ölçen karşılaştırmalar, bu ek yük nedeniyle muhtemelen çarpık olacaktır.

Bu durumu iyileştirmek için bir dizi araç sunulmuştur. Bu tür ilk araç Apache'nin mod perl, küçük Perl programlarının hızla çalıştırılmasının en yaygın nedenlerinden birini ele almaya çalışan: CGI geliştirme. ActivePerl, Microsoft aracılığıyla ISAPI, benzer performans iyileştirmeleri sağlar.

Perl kodu derlendikten sonra, yürütme aşamasında genellikle C veya C ++ gibi derlenmiş dillerde yazılan programlar için mevcut olmayan ek yük vardır. Bu tür ek yük örnekleri şunları içerir: bayt kodu yorumlama, referans sayma bellek yönetimi ve dinamik tip denetimi.

Optimizasyon

Perl yorumlanmış bir dil olduğu için, problem vermek verimlilik kritik olduğunda; bu tür durumlarda, en kritik rutinler diğer dillerde yazılabilir (örneğin C ), Perl'e basit Inline modülleri veya daha karmaşık ancak esnek XS mekanizma.[104]

Perl 5

Genellikle "Perl" olarak adlandırılan dil olan Perl 5, aktif olarak geliştirilmeye devam ediyor. Perl 5.12.0, Perl 6'nın tasarımından etkilenen bazı yeni özelliklerle Nisan 2010'da piyasaya sürüldü,[42][105] ardından Perl 5.14.1 (17 Haziran 2011'de yayınlandı), Perl 5.16.1 (9 Ağustos 2012'de yayınlandı.[106]) ve Perl 5.18.0 (18 Mayıs 2013'te yayınlandı). Perl 5 geliştirme sürümleri aylık olarak yayınlanır ve büyük sürümler yılda bir kez çıkar.[107]

Diğer programlama dilleri için yapılan benzer aramalarla karşılaştırıldığında "Perl programlama" için İnternet aramalarının göreli oranı, 2005'te yaklaşık% 10'dan 2011'de yaklaşık% 2'ye 2020'de yaklaşık% 0.7'ye düşmüştür.[108]

Raku (Perl 6)

KamelyaPerl 6 projesinin logosu.[109]

2000 yılında Perl Konferansı Jon Orwant, büyük bir yeni dil girişimi için bir dava açtı.[110] This led to a decision to begin work on a redesign of the language, to be called Perl 6. Proposals for new language features were solicited from the Perl community at large, which submitted more than 300 RFC'ler.

Wall spent the next few years digesting the RFCs and synthesizing them into a coherent framework for Perl 6. He presented his design for Perl 6 in a series of documents called "apocalypses" – numbered to correspond to chapters in Programming Perl. Ocak 2011 itibariyle, the developing specification of Perl 6 was encapsulated in design documents called Synopses – numbered to correspond to Apocalypses.[111]

Thesis work by Bradley M. Kuhn, overseen by Wall, considered the possible use of the Java sanal makinesi as a runtime for Perl.[112] Kuhn's thesis showed this approach to be problematic. In 2001, it was decided that Perl 6 would run on a cross-language sanal makine aranan Parrot. This will mean that other languages targeting the Parrot will gain native access to CPAN, allowing some level of cross-language development.

2005 yılında Audrey Tang yarattı Pugs project, an implementation of Perl 6 in Haskell. This acted as, and continues to act as, a test platform for the Perl 6 language (separate from the development of the actual implementation) – allowing the language designers to explore. The Pugs project spawned an active Perl/Haskell cross-language community centered around the freenode #perl6 IRC channel. Birçok fonksiyonel programlama influences were absorbed by the Perl 6 design team.

In 2012, Perl 6 development was centered primarily around two compilers:[113]

  1. Rakudo, an implementation running on the Parrot sanal makine ve Java sanal makinesi.[114]
  2. Niecza, which targets the Ortak dil çalışması.

2013 yılında, MoarVM (“Metamodel On A Runtime”), a C language-based sanal makine designed primarily for Rakudo was announced.[115]

In October 2019, Perl 6 was renamed to Raku.[116]

2017 itibariyle sadece Rakudo implementation and MoarVM are under active development, and other virtual machines, such as the Java Sanal Makinesi ve JavaScript are supported.[117]

Perl 7

Perl 7 was announced on 24 June 2020 at "The Perl Conference in the Cloud" as the successor to Perl 5.[118][119] Based on Perl 5.32, Perl 7 is designed to be backwards compatible with Perl 5.

Perl community

Perl's culture and community has developed alongside the language itself. Usenet was the first public venue in which Perl was introduced, but over the course of its evolution, Perl's community was shaped by the growth of broadening Internet-based services including the introduction of the World Wide Web. The community that surrounds Perl was, in fact, the topic of Wall's first "State of the Onion" talk.[120]

Soğan Devleti

State of the Onion is the name for Wall's yearly keynote -style summaries on the progress of Perl and its community. They are characterized by his hallmark humor, employing references to Perl's culture, the wider hacker culture, Wall's linguistic background, sometimes his family life, and occasionally even his Christian background.[121]

Each talk is first given at various Perl conferences and is eventually also published online.

Perl pastimes

JAPHs
In email, Usenet, and message board postings, "Bir başka Perl hacker'ı " (JAPH) programs are a common trend, originated by Randal L. Schwartz, one of the earliest professional Perl trainers.[122] In the parlance of Perl culture, Perl programmers are known as Perl hackers, and from this derives the practice of writing short programs to print out the phrase "Just another Perl hacker". In the spirit of the original concept, these programs are moderately obfuscated and short enough to fit into the signature of an email or Usenet message. The "canonical" JAPH as developed by Schwartz includes the comma at the end, although this is often omitted.[123]
Perl golf
Perl "golf" is the pastime of reducing the number of characters (key "strokes") used in a Perl program to the bare minimum, much in the same way that golf players seek to take as few shots as possible in a round. The phrase's first use[124] emphasized the difference between pedestrian code meant to teach a newcomer and terse hacks likely to amuse experienced Perl programmers, an example of the latter being JAPHs that were already used in signatures in Usenet postings and elsewhere. Similar stunts had been an unnamed pastime in the language APL in previous decades. The use of Perl to write a program that performed RSA encryption prompted a widespread and practical interest in this pastime.[125] In subsequent years, the term "code golf " has been applied to the pastime in other languages.[126] A Perl Golf Apocalypse was held at Perl Conference 4.0 in Monterey, California in July 2000.
Gizleme
As with C, obfuscated code competitions were a well known pastime in the late 1990s. Gizlenmiş Perl Yarışması was a competition held by The Perl Journal from 1996 to 2000 that made an arch virtue of Perl's syntactic flexibility. Awards were given for categories such as "most powerful"—programs that made efficient use of space—and "best four-line signature" for programs that fit into four lines of 76 characters in the style of a Usenet signature block.[127]
Şiir
Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks.[128]

Perl on IRC

Birkaç tane var IRC channels that offer support for the language and some modules.

IRC NetworkKanallar
irc.freenode.net#perl #perl6 #cbstream #perlcafe #poe
irc.perl.org#moose #poe #catalyst #dbix-class #perl-help #distzilla #epo #corehackers #sdl #win32 #toolchain #padre #dancer
irc.slashnet.org#perlmonks
irc.oftc.net#perl
irc.efnet.net#perlhelp
irc.rizon.net#perl
irc.debian.org#debian-perl (packaging Perl modules for Debian)

CPAN Acme

There are also many examples of code written purely for entertainment on the CPAN. Lingua::Romana::Perligata, for example, allows writing programs in Latince.[129] Upon execution of such a program, the module translates its source code into regular Perl and runs it.

The Perl community has set aside the "Acme " namespace for modules that are fun in nature (but its scope has widened to include exploratory or experimental code or any other module that is not meant to ever be used in production). Some of the Acme modules are deliberately implemented in amusing ways. This includes Acme::Bleach, one of the first modules in the Acme:: namespace,[130] which allows the program's source code to be "whitened" (i.e., all characters replaced with whitespace) and yet still work.

Örnek kod

In older versions of Perl, one would write the Selam Dünya program as:

Yazdır "Selam Dünya!";

Here is a more complex Perl program, that counts down the seconds up to a given threshold:

#!/usr/bin/perlkullanım katı;kullanım warnings;kullanım IO::Handle;benim ( $remaining, $total );$remaining = $total = shift(@ARGV);STDOUT->autoflush(1);süre ( $remaining ) {    printf ( "Remaining %s/%s ", $remaining--, $total );    uyku 1;}Yazdır "";

The perl interpreter can also be used for one-off scripts on the command line. The following example (as invoked from an sh-compatible shell, such as Bash) translates the string "Bob" in all files ending with .txt in the current directory to "Robert":

$ perl -i.bak -lp -e 's/Bob/Robert/g' *.txt

Eleştiri

Perl has been referred to as "line noise " by some programmers who claim its syntax makes it a write-only language. The earliest such mention was in the first edition of the book Learning Perl, a Perl 4 tutorial book written by Randal L. Schwartz,[131] in the first chapter of which he states: "Yes, sometimes Perl looks like line noise to the uninitiated, but to the seasoned Perl programmer, it looks like checksummed line noise with a mission in life."[132] He also stated that the accusation that Perl is a write-only language could be avoided by coding with "proper care".[132] The Perl overview document perlintro states that the names of built-in "magic" scalar değişkenler "look like punctuation or line noise".[133] However, the English module provides both long and short English alternatives. perlstyle document states that line noise in regular expressions could be mitigated using the / x modifier to add whitespace.[134]

Göre Perl 6 FAQ, Perl 6 was designed to mitigate "the usual suspects" that elicit the "line noise" claim from Perl 5 critics, including the removal of "the majority of the punctuation variables" and the sanitization of the regex syntax.[135] Perl 6 FAQ also states that what is sometimes referred to as Perl's line noise is "the actual syntax of the language" just as gerunds ve edatlar are a part of the ingilizce dili.[135] In a December 2012 blog posting, despite claiming that "Rakudo Perl 6 has failed and will continue to fail unless it gets some adult supervision", chromatic stated that the design of Perl 6 has a "well-defined grammar" as well as an "improved type system, a unified object system with an intelligent metamodel, metaoperators, and a clearer system of context that provides for such niceties as pervasive laziness".[136] He also stated that "Perl 6 has a coherence and a consistency that Perl 5 lacks."[136]

Ayrıca bakınız

Referanslar

  1. ^ "Perl 5.32.0 is now available!". www.nntp.perl.org. Alındı 20 Haziran 2020.
  2. ^ "Perl 5.30.3 is now available!". www.nntp.perl.org. Alındı 2 Haziran, 2020.
  3. ^ "Perl 5.33.4 is now available!". www.nntp.perl.org. Alındı 25 Kasım 2020.
  4. ^ a b "The "Artistic License" - dev.perl.org". dev.perl.org.
  5. ^ a b Sanatsal - file on the Perl 5 git repository
  6. ^ a b "Perl Licensing". dev.perl.org. Alındı 8 Ocak 2011.
  7. ^ Larry Wall. "Programming is Hard, Let's Go Scripting..." All language designers have their occasional idiosyncracies. I’m just better at it than most.
  8. ^ "About Perl". perl.org. Alındı 20 Nisan 2013. "Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language that has its own development team. Its existence has no significant impact on the continuing development of "Perl 5".
  9. ^ "Path to raku by lizmat". github.com. Alındı 16 Ekim 2019. This document describes the steps to be taken to effectuate a rename of `Perl 6` to `Raku`, as described in issue #81.
  10. ^ Lapworth, Leo. "General Questions About Perl". Perl FAQ. Perl.org. Alındı 24 Şubat 2012.
  11. ^ "perl(1): Practical Extraction/Report Language - Linux man page". Linux.die.net. Alındı 23 Temmuz 2013.
  12. ^ Sheppard, Doug (October 16, 2000). "Beginner's Introduction to Perl". dev.perl.org. Alındı 8 Ocak 2011.
  13. ^ Ashton, Elaine (1999). "The Timeline of Perl and its Culture (v3.0_0505)".
  14. ^ Schwartz, Randal L.; Christiansen, Tom/Foreword By-Wall (July 1, 1997). "Learning PERL". O'Reilly & Associates, Inc. – via dl.acm.org.[kalıcı ölü bağlantı ]
  15. ^ a b c d Wall, Larry, Tom Christiansen and Jon Orwant (Temmuz 2000). Programming Perl, Third Edition. O'Reilly Media. ISBN  978-0-596-00027-1.CS1 bakimi: birden çok ad: yazarlar listesi (bağlantı)
  16. ^ "Language Evaluations". Perl's strongest point is its extremely powerful built-in facilities for pattern-directed processing of textual, line-oriented data formats; it is unsurpassed at this.
  17. ^ "You Used Perl to Write WHAT?!". January 24, 2008. perl has always been the go-to language for any task that involves pattern-matching input
  18. ^ "The Importance of Perl". Arşivlenen orijinal 2 Şubat 2015. Alındı 4 Şubat 2015. Perl's unparalleled ability to process text...
  19. ^ Smith, Roderick W. (June 21, 2002). Advanced Linux Networking. Addison-Wesley Profesyonel. s.594. ISBN  978-0-201-77423-8.
  20. ^ Sheppard, Doug (October 16, 2000). "Beginner's Introduction to Perl". O'Reilly Media. Alındı 27 Temmuz 2008.
  21. ^ Raymond, Eric (December 23, 2003). "Swiss Army chainsaw". The Jargon File. Alındı 29 Kasım 2014.
  22. ^ Leonard, Andrew. "The joy of Perl". Salon.com. Alındı 5 Haziran 2012.
  23. ^ "How programs are measured | Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net. Alındı 5 Ekim 2020.
  24. ^ "RSA in 3 lines of perl - Everything2.com". everything2.com. Alındı 5 Ekim 2020.
  25. ^ Larry Wall (February 1, 1988). "v13i001: Perl, a "replacement" for awk and sed, Part01/10". Yeni Grupcomp.sources.unix. Alındı 13 Ocak 2011.
  26. ^ "perl.perl5.porters archive". perl.org. Alındı 13 Ocak 2011.
  27. ^ "perlhist — the Perl history records". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  28. ^ "CPAN". CPAN. Alındı 8 Mayıs 2017.
  29. ^ a b "perl5004delta — what's new for perl5.004". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 8 Ocak 2011.
  30. ^ Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen (2002). Perl in a Nutshell, Second Edition. O'Reilly Media. ISBN  978-0-596-00241-1.
  31. ^ "perl5005delta - what's new for perl5.005". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  32. ^ "perlhist - the Perl history records". www.cpan.org. Alındı 2 Haziran, 2020.
  33. ^ "Perl Source". www.cpan.org. Alındı 2 Haziran, 2020.
  34. ^ "perl56delta - what's new for perl v5.6.0". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  35. ^ "perl56delta - what's new for perl v5.6.x". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  36. ^ Wall, Larry. "Apocalypse 1: The Ugly, the Bad, and the Good". Alındı 8 Ocak 2011.
  37. ^ "perl58delta - what is new for perl v5.8.0". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  38. ^ "A Plan for Pugs". O'Reilly Media. March 3, 2005. Alındı 27 Ocak 2011.
  39. ^ Tang, Audrey (April 21, 2010). "Re: How to Implement Perl 6 in Ten Years". PerlMonks. Alındı 3 Ocak 2011.
  40. ^ "perl5100delta - what is new for perl 5.10.0". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 8 Ocak 2011.
  41. ^ "perlsyn - Perl syntax". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 21 Ocak 2011.
  42. ^ a b "perl5120delta - what is new for perl v5.12.0". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 8 Ocak 2011.
  43. ^ "perldelta - what is new for perl v5.12.3". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 8 Ocak 2011.
  44. ^ "perl5140delta - what is new for perl v5.14.0 - metacpan.org". metacpan.org.
  45. ^ a b "perldelta - what is new for perl v5.16.0". Perl 5 version 16.0 documentation. metacpan.org. Alındı 21 Mayıs, 2012.
  46. ^ "perl5180delta - what is new for perl v5.18.0 - Perl programming language". Perl 5 version 18.0 documentation. metacpan.org. Alındı 27 Ekim 2013.
  47. ^ "perl5200delta - what is new for perl v5.20.0 - Perl programming language". Perl 5 version 20.0 documentation. metacpan.org. Alındı 27 Mayıs 2014.
  48. ^ Milestones in the Perl Renaissance - Modern Perl Programming. Modernperlbooks.com. Erişim tarihi: 2013-07-17.
  49. ^ Preface (Modern Perl 2011-2012). Modernperlbooks.com. Erişim tarihi: 2013-07-17.
  50. ^ Modern Perl 2011-2012 edition by chromatic | Onyx Neon Press. Onyxneon.com. Erişim tarihi: 2013-07-17.
  51. ^ "Enlightened Perl". Enlightened Perl.
  52. ^ "YAPC::NA 2013 - June 3-5, Austin, Texas". Yapcna.org. June 4, 2013. Archived from orijinal 22 Haziran 2013. Alındı 11 Nisan, 2014.
  53. ^ Little, Stevan (February 8, 2013). "What is Moe (a clarification) | Stevan Little". Blogs.perl.org. Alındı 11 Nisan, 2014.
  54. ^ "p2 on potion". Perl11.org. 7 Şubat 2004. Alındı 11 Nisan, 2014.
  55. ^ "goccy/gperl 路 GitHub". Github.com. Alındı 11 Nisan, 2014.
  56. ^ "rperl". RPerl.org. Alındı 11 Ağustos 2014.
  57. ^ "Perl 7 announced at Perl Conference in the Cloud". perlfoundation.org. 24 Haziran 2020. Alındı 24 Haziran 2020.
  58. ^ "Announcing Perl 7". perl.com. 24 Haziran 2020. Alındı 24 Haziran 2020.
  59. ^ "Preparing for Perl 7d". leanpub.com. 24 Haziran 2020. Alındı 24 Haziran 2020.
  60. ^ Geoff Broadwell (August 8, 2005), OSCON 4.4: Inside Ponie, the Bridge from Perl 5 to Perl 6, O'Reilly ONLamp Blog
  61. ^ Jesse Vincent (August 23, 2006), Ponie has been put out to pasture, The Perl Foundation, archived from orijinal on June 27, 2009, alındı 15 Ocak 2019
  62. ^ Richardson, Marjorie (May 1, 1999). "Larry Wall, the Guru of Perl". Linux Journal. Alındı 3 Ocak 2011.
  63. ^ "perlfaq1: What's the difference between "perl" and "Perl"?". perldoc.perl.org - Perl 5 version 12.2 documentation.
  64. ^ Schwartz, Randal; foy, brian; Phoenix, Tom (June 16, 2011). Learning Perl. O'Reilly Media, Inc. s.4. ISBN  978-1449313142. Perl is sometimes called the "Practical Extraction and Report Language," although it has also been called a "Pathologically Eclectic Rubbish Lister," among other expansions. It's actually a backronym, not an acronym, since Larry Wall, Perl’s creator, came up with the name first and the expansion later. That’s why "Perl" isn’t in all caps. There's no point in arguing that expansion is correct: Larry endorses both.
  65. ^ Wall, Larry. "perl - The Perl language interpreter". Perl 5 version 12.2 documentation. Alındı 26 Ocak 2011.
  66. ^ Wall, Larry. "Re^7: PERL as shibboleth and the Perl community". PerlMonks. Alındı 2 Ocak, 2011.
  67. ^ a b Schwartz, Randal L; Phoenix, Tom; Foy, Brian (December 6, 2007). Learning Perl, Third Edition. ISBN  978-0-596-00132-2.
  68. ^ a b "The Perl Camel Usage and Trademark Information". O'Reilly Media. Arşivlenen orijinal on April 25, 2018. Alındı 9 Ocak 2011.
  69. ^ "Perl Trademark". The Perl Foundation. Arşivlenen orijinal on May 3, 2011. Alındı 9 Ocak 2011.
  70. ^ Gillmore, Dan (October 25, 1998). "Republic Of Perl". Chicago Tribune. Alındı 10 Ocak 2011.
  71. ^ Riedel, Sebastian (January 18, 2012). "Perl 5 Raptor". Sebastian Riedel. Alındı 12 Kasım 2017.
  72. ^ Trout, Matt (June 16, 2005). "State of the Velociraptor - Phase two". Shadowcat Systems Limited. Alındı 12 Kasım 2017.
  73. ^ "title unknown". May 10, 1997. Usenet:  [email protected].[ölü bağlantı ]
  74. ^ Wall, Larry (March 1, 1997). "Wherefore Art, Thou?". Linux Journal. Alındı 13 Mart, 2011.
  75. ^ "perlfunc - Perl builtin functions". Perl 5 version 12.2 documentation. perldoc.perl.org. Alındı 10 Ocak 2011.
  76. ^ "Perl 6 Specification". The Perl 6 Project. Alındı 27 Ocak 2011.
  77. ^ "Perl 6 Compilers". The Perl 6 Project. Alındı 27 Ocak 2011.
  78. ^ Gilmore, W. J. (2010). Beginning PHP and MySQL: From Novice to Professional, Fourth Edition. Apress. s.484. ISBN  978-1-4302-3114-1.
  79. ^ "IMDb Helpdesk: What software/hardware are you using to run the site?". internet Film veritabanı. Alındı 12 Şubat 2011.
  80. ^ DuckDuckGo handles a large amount of search queries at 4.5 million queries per day . https://duckduckgo.com/traffic.html
  81. ^ DuckDuckGo uses Perl https://news.ycombinator.com/item?id=1500487
  82. ^ "Perl FAQ". Perl is used quite extensively in Debian. Not only are some core functions written in Perl, but there are over 700 packages in unstable that have perl in their name (Mar 2004).
  83. ^ "Perl Books - Book: Data Munging with Perl". Perl.org. Alındı 30 Aralık 2010.
  84. ^ A description of the Perl 5 interpreter can be found in Programming Perl, 3rd Ed., chapter 18. See particularly page 467, which carefully distinguishes run phase and compile phase from Çalışma süresi ve Derleme zamanı. Perl "time" and "phase" are often confused.
  85. ^ Schwartz, Randal. "On Parsing Perl". Alındı 3 Ocak 2007.
  86. ^ "The Perl Journal #19/9.26" (PDF). O'Reilly Media. Alındı 4 Şubat 2011.
  87. ^ Kennedy, Adam (2006). "PPI—Parse, Analyze and Manipulate Perl (without perl)". CPAN.
  88. ^ "Rice's Theorem". The Perl Review. 4 (3): 23–29. Summer 2008. ve "Perl is Undecidable". The Perl Review. 5: 7–11. 2008 Güz., çevrimiçi olarak şu adresten ulaşılabilir: Kegler, Jeffrey. "Perl and Undecidability".
  89. ^ Hietaniemi, Jarkko (1998). "Perl Ports (Binary Distributions)". CPAN.org.
  90. ^ "The MacPerl Pages". Prime Time Freeware. 1997.
  91. ^ "Perl Ports (Binary Distributions)". CPAN. Alındı 27 Ocak 2011.
  92. ^ "ActivePerl is Perl for Windows, Mac, Linux, AIX, HP-UX & Solaris". ActiveState Software. Arşivlenen orijinal on March 31, 2016. Alındı 9 Ocak 2011.
  93. ^ "Using PPM". ActiveState Software. Alındı 9 Ocak 2011.
  94. ^ "Goodbye PPM, Hello State Tool". activestate.com. July 23, 2019.
  95. ^ readme.txt
  96. ^ Descartes, Alligator; Bunce, Tim (2000). Programming the Perl DBI : [database programming with Perl] (1 ed.). Beijing [u.a.]: O'Reilly. ISBN  978-1-56592-699-8.
  97. ^ Bekman, Stas. "Efficient Work with Databases under mod_perl". Alındı 1 Eylül, 2007.
  98. ^ "Class::DBI - Simple Database Abstraction - metacpan.org". metacpan.org. Alındı 8 Nisan 2020.
  99. ^ "Rose::DB::Object - Extensible, high performance object-relational mapper (ORM). - metacpan.org". metacpan.org. Alındı 8 Nisan 2020.
  100. ^ "Alioth: The Computer Language Benchmarks Game: Project Info". Alioth. Arşivlenen orijinal on March 25, 2013. Alındı 13 Ocak 2011.
  101. ^ "Which programs are fastest?". Computer Language Benchmarks Game. Alioth. Arşivlenen orijinal on May 17, 2013. Alındı 13 Ocak 2011.
  102. ^ Leroy, Jean-Louis (December 1, 2005). "A Timely Start". O'Reilly.
  103. ^ Beattie, Malcolm & Enache Adrian (2003). "B::Bytecode Perl compiler's bytecode backend". CPAN.
  104. ^ Ingerson, Brian. "Inline - metacpan.org". CPAN. Arşivlenen orijinal 13 Haziran 2013. Alındı 26 Ocak 2011.
  105. ^ "Perl 5.12.0 released - Update". Heise Media UK. April 13, 2010. Archived from orijinal 19 Nisan 2010. Alındı 8 Ocak 2011.
  106. ^ "perl 5.16.1 released!". August 9, 2012. Alındı 26 Ağustos 2012.
  107. ^ "The unstoppable Perl release train?". LWN.net. 29 Şubat 2012. Alındı 28 Mart, 2012.
  108. ^ TIOBE Software Index (2020). "TIOBE Programming Community Index Perl". Alındı 6 Şubat 2020.
  109. ^ "Perl 6". The Perl 6 Project. Alındı 27 Şubat 2011.
  110. ^ Torkington, Nathan. "Transcription of Larry's talk". nntp.perl.org. Alındı Ocak 25, 2011.
  111. ^ "Official Perl 6 Documentation". The Perl 6 Project. Arşivlenen orijinal 31 Ağustos 2009. Alındı Ocak 25, 2011.
  112. ^ Kuhn, Bradley (January 2001). "Considerations on Porting Perl to the Java Virtual Machine". Cincinnati Üniversitesi. Alındı 28 Haziran 2008. Alıntı dergisi gerektirir | günlük = (Yardım Edin)
  113. ^ "Feature comparison of Perl 6 compilers". Arşivlenen orijinal on August 11, 2017. Alındı 28 Mart, 2012.
  114. ^ Worthington, Jonathan (July 15, 2013). "Rakudo JVM News: More tests, plus Thread and Promise prototypes". 6guts. Alındı 24 Temmuz 2013.
  115. ^ Worthington, Jonathan (May 31, 2013). "MoarVM: A virtual machine for NQP and Rakudo". 6guts. Alındı 24 Temmuz 2013.
  116. ^ "rename-lwn". Arşivlenen orijinal on October 17, 2019. Alındı 10 Kasım 2019.
  117. ^ "rakudo/rakudo - GitHub". Github.com. Alındı 21 Eylül 2013.
  118. ^ "Announcing Perl 7". perl.com. 24 Haziran 2020. Alındı 24 Haziran 2020.
  119. ^ "Perl 7 announced at Perl Conference in the Cloud". perlfoundation.org. 24 Haziran 2020. Alındı 24 Haziran 2020.
  120. ^ Wall, Larry (May 22, 2014). "Perl Culture (AKA the first State of the Onion)".
  121. ^ Larry Wall. "2nd State of the Onion". Alındı 12 Ekim 2012. (Search for 'church')
  122. ^ Randal L. Schwartz (2 Mayıs 1999). "Who is Just another Perl hacker?". Yeni Grupcomp.lang.perl.misc. Usenet:  [email protected]. Alındı 5 Aralık 2014.
  123. ^ Schwartz, Randal (March 31, 2005). "Canonical JAPH". PerlMonks. Alındı 16 Mayıs 2011.
  124. ^ Greg Bacon (May 28, 1999). "Re: Incrementing a value in a slice". Yeni Grupcomp.lang.perl.misc. Usenet:  [email protected]. Alındı 12 Temmuz, 2011.
  125. ^ Back, Adam. "RSA in 5 lines of perl". Alındı 10 Ocak 2011.
  126. ^ "Code Golf: What is Code Golf?". 29degrees. 2007. Arşivlenen orijinal 13 Ocak 2012. Alındı 26 Kasım 2018.
  127. ^ Gallo, Felix (2003). "The Zeroth Obfuscated Perl Contest" (PDF). In Jon Orwant (ed.). Games, diversions, and Perl culture: best of the Perl journal. O'Reilly Media. Arşivlenen orijinal (PDF) on November 22, 2009. Alındı 12 Ocak 2011.
  128. ^ "Perl Poetry". PerlMonks. Alındı 27 Ocak 2011.
  129. ^ Conway, Damian. "Lingua::Romana::Perligata -- Perl for the XXI-imum Century".
  130. ^ Brocard, Leon (May 22, 2014). "use Perl; Journal of acme". GrnLight.net. Arşivlenen orijinal on May 22, 2014.
  131. ^ "Developer Update". Dr. Dobb's Developer Update. Miller-Freeman. 2. 1995.
  132. ^ a b Schwartz, Randal L. (1993). Learning Perl. O'Reilly & Associates. Bibcode:1993lepe.book.....S.
  133. ^ "perlintro". Perl 5 version 18.0 documentation. Perl 5 Porters and perldoc.perl.org. Arşivlenen orijinal on January 9, 2011. Alındı 30 Haziran, 2013.
  134. ^ "perlstyle". Perl 5 version 18.0 documentation. Perl 5 Porters and perldoc.perl.org. Arşivlenen orijinal 26 Haziran 2013. Alındı 30 Haziran, 2013.
  135. ^ a b "Perl 6 FAQ". Perl 6 Project. Alındı 30 Haziran, 2013.
  136. ^ a b chromatic (December 31, 2012). "The Implementation of Perl 5 versus Perl 6". Alındı 30 Haziran, 2013.

daha fazla okuma

Dış bağlantılar