Perl - Perl

Perl
Programmierung-republic-of-perl.png
Paradigma Multiparadigma : funktional , zwingend , objektorientiert ( klassenbasiert ), reflexiv
Entworfen von Larry Wall
Entwickler Larry Wall
Erstmals erschienen 1. Februar 1988 ; Vor 33 Jahren ( 1988-02-01 )
Stabile Version
Vorschauversion
5.35.4 / 20. September 2021 ; Vor 22 Tagen ( 2021-09-20 )
Schreibdisziplin Dynamisch
Implementierungssprache C
Betriebssystem Plattformübergreifend
Lizenz Künstlerische Lizenz 1.0 oder GNU General Public License
Dateinamenerweiterungen .plx, .pl, .pm, .xs, .t, .pod, .cgi
Webseite www .perl .org
Beeinflusst von
AWK , BASIC , C , C++ , Lisp , sed , Unix-Shell
Beeinflusst
CoffeeScript , Groovy , JavaScript , Julia , LPC , PHP , Python , Raku , Ruby , PowerShell

Perl ist eine Familie von zwei hochrangigen , universellen , interpretierten , dynamischen Programmiersprachen . „Perl“ bezieht sich auf Perl 5, aber von 2000 bis 2019 auch auf seine neu gestaltete „Schwestersprache“, Perl 6, bevor letzteres im Oktober 2019 offiziell in Raku geändert wurde .

Obwohl Perl offiziell kein Akronym ist, werden verschiedene Backronyme verwendet, darunter "Practical Extraction and Reporting Language". Perl wurde 1987 von Larry Wall als universelle Unix- Skriptsprache entwickelt , um die Berichtsverarbeitung zu vereinfachen. Seitdem hat es viele Änderungen und Überarbeitungen erfahren. Raku, das im Jahr 2000 als Redesign von Perl 5 begann, entwickelte sich schließlich zu einer eigenen Sprache. Beide Sprachen werden weiterhin unabhängig von verschiedenen Entwicklungsteams entwickelt und leihen sich großzügig Ideen voneinander.

Die Perl-Sprachen leihen sich Funktionen von anderen Programmiersprachen, einschließlich C , Shell-Skript ( sh ), AWK und sed ; Sie bieten Textverarbeitungsfunktionen ohne die willkürlichen Datenlängenbeschränkungen vieler zeitgenössischer Unix-Befehlszeilentools . Perl 5 erlangte in den späten 1990er Jahren als CGI-Skriptsprache große Popularität , teilweise aufgrund seiner unübertroffenen Fähigkeiten für reguläre Ausdrücke und String- Parsing .

Neben CGI wird Perl 5 für die Systemadministration , Netzwerkprogrammierung , Finanzen, Bioinformatik und andere Anwendungen, wie zum Beispiel für GUIs, verwendet . Sie wurde wegen ihrer Flexibilität und Kraft, aber auch wegen ihrer Hässlichkeit, "die Kettensäge der Schweizer Armee der Skriptsprachen" genannt. 1998 wurde es auch als „ Klebeband , das das Internet zusammenhält“ bezeichnet, sowohl in Bezug auf seine allgegenwärtige Verwendung als Klebesprache als auch auf seine wahrgenommene Uneleganz.

Perl ist eine sehr ausdrucksstarke Programmiersprache: Quellcode für einen bestimmten Algorithmus kann kurz und stark komprimierbar sein.

Name

Perl hieß ursprünglich "Pearl". Wall wollte der Sprache einen Kurznamen mit positiver Konnotation geben. Wall entdeckte die existierende Programmiersprache PEARL vor der offiziellen Veröffentlichung von Perl und änderte die Schreibweise des Namens.

In Bezug auf die Sprache wird der Name groß geschrieben: Perl . Wenn auf das Programm selbst Bezug genommen wird, wird der Name nicht groß geschrieben ( perl ), da die meisten Unix-ähnlichen Dateisysteme die Groß-/Kleinschreibung beachten . Vor der Veröffentlichung der ersten Ausgabe von Programming Perl war es üblich, die Sprache als Perl zu bezeichnen . Randal L. Schwartz hat den Namen der Sprache im Buch jedoch groß geschrieben, damit er beim Satz besser hervorsticht. Diese Fallunterscheidung wurde später als kanonisch dokumentiert.

Der Name wird gelegentlich als Backronym erweitert : Practical Extraction and Report Language und Walls eigener Pathologically Eclectic Rubbish Lister, der sich in der Handbuchseite von Perl befindet.

Geschichte

Frühe Versionen

Larry Wall begann 1987 mit der Arbeit an Perl, während er als Programmierer bei Unisys arbeitete , und am 1. Februar 1988 wurde Version 1.0 in der Newsgroup comp.sources.unix veröffentlicht. Die Sprache wurde in den nächsten Jahren schnell erweitert.

Perl 2, das 1988 veröffentlicht wurde, verfügte über eine bessere Engine für reguläre Ausdrücke. Perl 3, das 1989 veröffentlicht wurde, fügte Unterstützung für binäre Datenströme hinzu .

Ursprünglich war die einzige Dokumentation für Perl eine einzige lange Handbuchseite . 1991 wurde Programming Perl , das vielen Perl-Programmierern wegen seines Covers als "Camel Book" bekannt ist, veröffentlicht und wurde de facto zur Referenz für die Sprache. Gleichzeitig wurde die Perl-Versionsnummer auf 4 angehoben, nicht um eine größere Änderung in der Sprache zu markieren, sondern um die im Buch gut dokumentierte Version zu identifizieren.

Frühes Perl 5

Perl 4 ging durch eine Reihe von Wartungs - Releases im Jahr 1993 in Perl 4.036 gipfelte, woraufhin Wand Perl verließ 4 Arbeit auf Perl 5.e Erstes Design von Perl 5 in 1994. Die Fortsetzung beginnt perl5-Träger - Mailingliste wurde im Mai 1994 gegründet , um koordinieren die Arbeit an der Portierung von Perl 5 auf verschiedene Plattformen. Es bleibt das wichtigste Forum für Entwicklung, Wartung und Portierung von Perl 5.

Perl 5.000 wurde am 17. Oktober 1994 veröffentlicht. Es war eine fast vollständige Neufassung des Interpreters und fügte der Sprache viele neue Funktionen hinzu, einschließlich Objekte , Referenzen , lexikalische (meine) Variablen und Module . Wichtig ist, dass Module einen Mechanismus zum Erweitern der Sprache bereitstellten, ohne den Interpreter zu modifizieren. Dadurch konnte sich der Kerninterpreter stabilisieren, während es normalen Perl-Programmierern ermöglichte, neue Sprachfeatures hinzuzufügen. Perl 5 befindet sich seitdem in aktiver Entwicklung.

Perl 5.001 wurde am 13. März 1995 veröffentlicht. Perl 5.002 wurde am 29. Februar 1996 mit dem neuen Prototypen-Feature veröffentlicht. Dies ermöglichte es Modulautoren , Unterroutinen zu erstellen , die sich wie Perl - Builtins verhalten . Perl 5.003 wurde am 25. Juni 1996 als Sicherheitsrelease veröffentlicht.

Eines der wichtigsten Ereignisse in der Geschichte von Perl 5 fand außerhalb der eigentlichen Sprache statt und war eine Folge der Modulunterstützung. Am 26. Oktober 1995 wurde das Comprehensive Perl Archive Network (CPAN) als Repository für die Perl-Sprache und die Perl-Module eingerichtet ; Stand Mai 2017 trägt es über 185.178 Module in 35.190 Distributionen, geschrieben von mehr als 13.071 Autoren und wird weltweit an mehr als 245 Standorten gespiegelt.

Perl 5.004 wurde am 15. Mai 1997 veröffentlicht und enthielt unter anderem das UNIVERSAL-Paket, das Perl ein Basisobjekt verlieh, von dem alle Klassen automatisch abgeleitet wurden, und die Möglichkeit, Versionen von Modulen zu verlangen. Eine weitere bedeutende Entwicklung war die Aufnahme des Moduls CGI.pm , das zur Popularität von Perl als CGI-Skriptsprache beitrug .

Perl 5.004 fügte Unterstützung für Microsoft Windows , Plan 9 , QNX und AmigaOS hinzu .

Perl 5.005 wurde am 22. Juli 1998 veröffentlicht. Diese Version enthielt mehrere Verbesserungen der Regex- Engine, neue Hooks in das Backend durch die B::*Module, den qr//Regex-Quote-Operator, eine große Auswahl anderer neuer Kernmodule und zusätzliche Unterstützung für mehrere weitere Betriebssysteme Systeme, einschließlich BeOS .

2000–2020

Hauptversion Neuestes Update
Alte Version, nicht mehr gepflegt: 5,4 1999-04-29
Alte Version, nicht mehr gepflegt: 5,5 1999-03-29
Alte Version, nicht mehr gepflegt: 5,6 2003-11-15
Alte Version, nicht mehr gepflegt: 5,8 2008-12-14
Alte Version, nicht mehr gepflegt: 5.10 2009-08-23
Alte Version, nicht mehr gepflegt: 5.12 2012-11-10
Alte Version, nicht mehr gepflegt: 5.14 2013-03-10
Alte Version, nicht mehr gepflegt: 5.16 2013-03-11
Alte Version, nicht mehr gepflegt: 5,18 2014-10-02
Alte Version, nicht mehr gepflegt: 5.20 2015-09-12
Alte Version, nicht mehr gepflegt: 5,22 2017-07-15
Alte Version, nicht mehr gepflegt: 5,24 2018-04-14
Alte Version, nicht mehr gepflegt: 5,26 2018-11-29
Alte Version, nicht mehr gepflegt: 5,28 2020-06-01
Alte Version, nicht mehr gepflegt: 5.30 2020-06-01
Ältere Version, aber noch gepflegt: 5.32 2021-01-23
Aktuelle stabile Version: 5,34 2021-05-20
Neueste Vorschauversion einer zukünftigen Version: 5,35 2021-05-21
Zukünftige Veröffentlichung: 5,36 2022-05-20
Zukünftige Veröffentlichung: 7,0 2022?
Legende:
Alte Version
Ältere Version, noch gewartet
Aktuelle stabile Version
Neueste Vorschauversion
Zukünftige Veröffentlichung

Perl 5.6 wurde am 22. März 2000 veröffentlicht. Zu den wichtigsten Änderungen gehörten 64-Bit- Unterstützung, Unicode- String-Darstellung, Unterstützung für Dateien über 2 GiB und das Schlüsselwort "unser". Bei der Entwicklung von Perl 5.6 wurde die Entscheidung getroffen, das Versionierungsschema auf ein ähnliches wie bei anderen Open-Source-Projekten umzustellen ; nach 5.005_63 wurde die nächste Version 5.5.640, mit Plänen für Entwicklungsversionen mit ungeraden Zahlen und stabile Versionen mit geraden Zahlen.

Im Jahr 2000 rief Wall aus der Community zur Einreichung von Vorschlägen für eine neue Perl-Version auf. Der Prozess führte zu 361 RFC-Dokumenten (Request for Comments), die bei der Entwicklung von Perl 6 verwendet werden sollten das Design der nächsten Perl-Generation. Sie wurden als Zusammenfassung der RFCs und nicht als formelles Dokument präsentiert. Zu diesem Zeitpunkt existierte Perl 6 nur als Beschreibung einer Sprache.

Perl 5.8 wurde erstmals am 18. Juli 2002 veröffentlicht und seitdem fast jährlich aktualisiert. Perl 5.8 verbesserte die Unicode-Unterstützung, fügte eine neue I/O-Implementierung hinzu, fügte eine neue Thread-Implementierung hinzu, verbesserte die numerische Genauigkeit und fügte mehrere neue Module hinzu. Ab 2013 ist diese Version immer noch die beliebteste Version von Perl und wird von Red Hat 5, Suse 10, Solaris 10, HP-UX 11.31 und AIX 5 verwendet.

2004 begannen die Arbeiten an den „Synopses“ – Dokumenten, die ursprünglich die Apokalypsen zusammenfassten, aber zur Spezifikation für die Sprache Perl 6 wurden. Im Februar 2005 begann Audrey Tang mit der Arbeit an Pugs , einem in Haskell geschriebenen Perl-6-Interpreter . Dies war der erste gemeinsame Versuch, Perl 6 Wirklichkeit werden zu lassen. Diese Bemühungen sind 2006 ins Stocken geraten.

PONIE ist ein Akronym für Perl On New Internal Engine. Das PONIE-Projekt existierte von 2003 bis 2006 und sollte eine Brücke zwischen Perl 5 und Perl 6 bilden. Es war ein Versuch, den Perl 5-Interpreter so umzuschreiben, dass er auf Parrot , der virtuellen Perl 6-Maschine , läuft . Ziel war es, die Zukunft der Millionen Zeilen Perl-5-Code bei Tausenden von Unternehmen auf der ganzen Welt zu sichern. Das Projekt PONIE endete 2006 und wird nicht mehr aktiv weiterentwickelt. Einige der Verbesserungen, die am Perl 5-Interpreter als Teil von PONIE vorgenommen wurden, wurden in dieses Projekt integriert.

Am 18. Dezember 2007, dem 20-jährigen Jubiläum von Perl 1.0, wurde Perl 5.10.0 veröffentlicht. Perl 5.10.0 enthielt bemerkenswerte neue Funktionen, die es Perl 6 näher brachten. Dazu gehörten eine switch-Anweisung (genannt "given"/"when"), Aktualisierungen von regulären Ausdrücken und der Smart-Match-Operator (~~). Ungefähr zur gleichen Zeit begann die ernsthafte Entwicklung einer weiteren Implementierung von Perl 6, bekannt als Rakudo Perl , die zusammen mit der Parrot Virtual Machine entwickelt wurde . Seit November 2009 hat Rakudo Perl regelmäßige monatliche Releases und ist jetzt die vollständigste Implementierung von Perl 6.

Eine wesentliche Änderung im Entwicklungsprozess von Perl 5 trat mit Perl 5.11 auf; Die Entwickler-Community hat auf einen monatlichen Release-Zyklus von Entwickler-Releases mit einem jährlichen Zeitplan für stabile Releases umgestellt. Nach diesem Plan werden alle drei Monate Bugfix-Point-Releases auf die stabilen Releases folgen.

Am 12. April 2010 wurde Perl 5.12.0 veröffentlicht. Zu den bemerkenswerten Kernverbesserungen gehören eine neue package NAME VERSIONSyntax, der Yada-Yada-Operator (der Platzhaltercode markieren soll, der noch nicht implementiert ist), implizite Beschränkungen , vollständige Y2038- Konformität, Überladung der Regex-Konvertierung, DTrace- Unterstützung und Unicode 5.2. Am 21. Januar 2011 wurde Perl 5.12.3 veröffentlicht; es enthält aktualisierte Module und einige Änderungen an der Dokumentation. Version 5.12.4 wurde am 20. Juni 2011 veröffentlicht. Die neueste Version dieses Zweigs, 5.12.5, wurde am 10. November 2012 veröffentlicht.

Am 14. Mai 2011 wurde Perl 5.14 mit integrierter JSON- Unterstützung veröffentlicht .

Am 20. Mai 2012 wurde Perl 5.16 veröffentlicht. Zu den bemerkenswerten neuen Funktionen gehört die Möglichkeit, eine bestimmte Perl-Version anzugeben, die man emulieren möchte, was es Benutzern ermöglicht, ihre Perl-Version zu aktualisieren, aber immer noch alte Skripte auszuführen, die normalerweise inkompatibel wären. Perl 5.16 aktualisiert auch den Kern, um Unicode 6.1 zu unterstützen .

Am 18. Mai 2013 wurde Perl 5.18 veröffentlicht. Zu den bemerkenswerten neuen Features gehören die neuen dtrace-Hooks, lexikalische Subs, mehr CORE:: Subs, Überarbeitung des Hashs aus Sicherheitsgründen, Unterstützung für Unicode 6.2.

Am 27. Mai 2014 wurde Perl 5.20 veröffentlicht. Zu den bemerkenswerten neuen Funktionen gehören Subroutinen-Signaturen, Hash-Slices/neue Slice-Syntax, Postfix-Dereferenzierung (experimentell), Unicode 6.3, rand() mit konsistentem Zufallszahlengenerator.

Einige Beobachter schreiben der Veröffentlichung von Perl 5.10 den Beginn der Modern-Perl-Bewegung zu. Insbesondere beschreibt dieser Ausdruck einen Entwicklungsstil, der die Verwendung des CPAN umfasst, die jüngsten Entwicklungen in der Sprache nutzt und bei der Erstellung von qualitativ hochwertigem Code rigoros ist. Während das Buch "Modern Perl" der sichtbarste Standardträger dieser Idee ist, haben sich andere Gruppen wie die Enlightened Perl Organization der Sache angenommen.

Ende 2012 und 2013 starteten mehrere Projekte für alternative Implementierungen für Perl 5: Perl5 in Perl6 vom Rakudo-Perl-Team, moe von Stevan Little and friends, p2 vom Perl11-Team unter Reini Urban, gperl von goccy und rperl, ein Kickstarter Projekt unter der Leitung von Will Braswell und mit dem Perll11-Projekt verbunden.

ab 2020

Im Juni 2020 wurde Perl 7 als Nachfolger von Perl 5 angekündigt. Perl 7 sollte zunächst auf Perl 5.32 basieren, eine Veröffentlichung im ersten Halbjahr 2021 erwartet, Release-Kandidaten früher. Dieser Plan wurde im Mai 2021 überarbeitet, ohne dass ein Release-Zeitrahmen oder eine Version von Perl 5 als Basis angegeben wurde. Wenn Perl 7 veröffentlicht wird, wird Perl 5 langfristig gewartet. Unterstützte Perl 5-Versionen erhalten jedoch weiterhin wichtige Sicherheits- und Fehlerkorrekturen.

Symbole

Kamel

Das von O'Reilly Media verwendete Kamelsymbol

Programming Perl , herausgegeben von O'Reilly Media , zeigt ein Bild eines Dromedars auf dem Cover und wird allgemein als "Camel Book" bezeichnet. Dieses Bild ist zu einem inoffiziellen Symbol für Perl sowie zu einem allgemeinen Hacker- Emblem geworden, das auf T-Shirts und anderen Kleidungsstücken erscheint.

O'Reilly besitzt das Bild als Marke , lizenziert es jedoch für den nicht-kommerziellen Gebrauch und erfordert nur eine Bestätigung und einen Link zu www.perl.com. Über die Lizenzierung zur gewerblichen Nutzung wird im Einzelfall entschieden. O'Reilly bietet auch "Programming Republic of Perl"-Logos für nicht-kommerzielle Sites und "Powered by Perl"-Schaltflächen für jede Site, die Perl verwendet.

Zwiebel

Das von der Perl Foundation verwendete Zwiebellogo

Die Perl Foundation besitzt ein alternatives Symbol, eine Zwiebel, die sie an ihre Tochtergesellschaften Perl Mongers , PerlMonks , Perl.org und andere lizenziert. Das Symbol ist ein visuelles Wortspiel auf Perlzwiebeln .

Raubvogel

Alternatives Perl 5 Logo

Sebastian Riedel, der Schöpfer von Mojolicious , hat ein Logo erstellt, das einen Greifvogel-Dinosaurier darstellt , das unter einer CC-SA-Lizenz, Version 4.0, erhältlich ist. Das Analogon des Raptors stammt aus einer Reihe von Vorträgen, die Matt S Trout ab 2010 gehalten hat.

Überblick

Laut Wall hat Perl zwei Slogans. Die erste ist " Es gibt mehr als einen Weg " , allgemein bekannt als TMTOWTDI . Der zweite Slogan lautet: „Einfache Dinge sollen leicht und schwere Dinge möglich sein“.

Merkmale

Die Gesamtstruktur von Perl leitet sich im Großen und Ganzen von C ab. Perl ist von Natur aus prozedural , mit Variablen , Ausdrücken , Zuweisungsanweisungen , durch Klammern getrennten Blöcken , Kontrollstrukturen und Unterprogrammen .

Perl übernimmt auch Funktionen aus der Shell-Programmierung. Alle Variablen sind mit führenden Sigillen gekennzeichnet , die es ermöglichen, Variablen direkt in Strings zu interpolieren . Anders als die Shell verwendet Perl jedoch bei allen Zugriffen auf Variablen Siegel, und im Gegensatz zu den meisten anderen Programmiersprachen, die Siegel verwenden, bezeichnet das Siegel nicht den Typ der Variablen, sondern den Typ des Ausdrucks. Während also beispielsweise ein Array mit dem Sigill "@" (zB ) bezeichnet wird, wird ein einzelnes Mitglied des Arrays durch das skalare Sigill "$" (zB ) bezeichnet. Perl hat auch viele eingebaute Funktionen, die Werkzeuge bereitstellen, die häufig bei der Shell-Programmierung verwendet werden (obwohl viele dieser Werkzeuge von Programmen außerhalb der Shell implementiert werden), wie zum Beispiel sortieren und Betriebssystemfunktionen aufrufen . @arrayname$arrayname[3]

Perl nimmt Hashes ("assoziative Arrays") von AWK und reguläre Ausdrücke von sed . Diese vereinfachen viele Analyse-, Textverarbeitungs- und Datenverwaltungsaufgaben. Gemeinsam mit Lisp ist die implizite Rückgabe des letzten Wertes in einem Block, und alle Anweisungen sind auch Ausdrücke, die selbst in größeren Ausdrücken verwendet werden können.

Perl 5 fügte Features hinzu, die komplexe Datenstrukturen unterstützen , erstklassige Funktionen ( dh Closures als Werte) und ein objektorientiertes Programmiermodell. Dazu gehören Referenzen , Pakete, klassenbasierte Methoden-Dispatch und lexikalisch gültige Variablen sowie Compiler-Direktiven (z. B. das strict Pragma ). Ein wichtiges zusätzliches Feature, das mit Perl 5 eingeführt wurde, war die Möglichkeit, Code in wiederverwendbare Module zu packen. Wall erklärte später, dass "die ganze Absicht des Modulsystems von Perl 5 darin bestand, das Wachstum der Perl-Kultur und nicht des Perl-Kerns zu fördern."

Alle Versionen von Perl führen eine automatische Datentypisierung und automatische Speicherverwaltung durch . Der Interpreter kennt den Typ und die Speicheranforderungen jedes Datenobjekts im Programm; es ordnet und gibt Speicher für sie nach Bedarf unter Verwendung von Referenzzählungen frei (damit kann es zirkuläre Datenstrukturen nicht ohne manuelles Eingreifen aufheben ). Konvertierungen von legalen Typen – zum Beispiel Konvertierungen von Zahl in Zeichenfolge – werden automatisch zur Laufzeit durchgeführt ; illegale Typkonvertierungen sind fatale Fehler.

Entwurf

Das Design von Perl kann als Reaktion auf drei allgemeine Trends in der Computerindustrie verstanden werden: sinkende Hardwarekosten, steigende Arbeitskosten und Verbesserungen in der Compilertechnologie . Viele frühere Computersprachen, wie Fortran und C, zielten darauf ab, teure Computerhardware effizient zu nutzen. Im Gegensatz dazu wurde Perl entworfen, damit Computerprogrammierer Programme schneller und einfacher schreiben können.

Perl hat viele Funktionen, die dem Programmierer die Arbeit auf Kosten höherer CPU- und Speicheranforderungen erleichtern . Dazu gehören die automatische Speicherverwaltung; dynamisches Tippen ; Strings, Listen und Hashes; Reguläre Ausdrücke; Selbstbeobachtung ; und eine eval()Funktion. Perl folgt der Theorie "keine eingebauten Grenzen", eine Idee ähnlich der Zero One Infinity- Regel.

Wall wurde als Linguist ausgebildet, und das Design von Perl ist stark von linguistischen Prinzipien geprägt. Beispiele hierfür sind die Huffman-Codierung (allgemeine Konstruktionen sollten kurz sein), eine gute Endgewichtung (die wichtigen Informationen sollten zuerst kommen) und eine große Sammlung von Sprachprimitiven . Perl bevorzugt Sprachkonstrukte, die für Menschen prägnant und natürlich zu schreiben sind, selbst wenn sie den Perl-Interpreter komplizieren.

Die Syntax von Perl spiegelt die Idee wider, dass "Dinge, die anders sind, anders aussehen sollten". Skalare, Arrays und Hashes haben beispielsweise unterschiedliche führende Sigillen. Array-Indizes und Hash-Schlüssel verwenden verschiedene Arten von geschweiften Klammern. Strings und reguläre Ausdrücke haben unterschiedliche Standardtrennzeichen. Dieser Ansatz kann mit einer Sprache wie Lisp verglichen werden , bei der dieselbe grundlegende Syntax, die aus einfachen und universellen symbolischen Ausdrücken besteht, für alle Zwecke verwendet wird.

Perl erzwingt kein bestimmtes Programmierparadigma ( prozedural , objektorientiert , funktional oder andere) oder verlangt vom Programmierer sogar, zwischen ihnen zu wählen.

Sowohl die Perl-Sprache als auch die sie umgebende Gemeinschaft und Kultur haben eine breite praktische Ausrichtung. Das Vorwort zu Programmieren mit Perl beginnt: "Perl ist eine Sprache, mit der Sie Ihre Arbeit erledigen können." Eine Folge davon ist, dass Perl keine saubere Sprache ist. Es enthält viele Funktionen, toleriert Ausnahmen von seinen Regeln und verwendet Heuristiken , um syntaktische Mehrdeutigkeiten aufzulösen. Aufgrund der nachsichtigen Natur des Compilers können Fehler manchmal schwer zu finden sein. In der Funktionsdokumentation von Perl wird das Variantenverhalten von eingebauten Funktionen in Listen- und Skalarkontexten wie folgt erwähnt: "Im Allgemeinen tun sie, was Sie wollen, es sei denn, Sie wollen Konsistenz."

Für die Perl-Versionen bis Perl 5 existiert keine schriftliche Spezifikation oder kein Standard für die Perl-Sprache, und es ist nicht geplant, eine für die aktuelle Perl-Version zu erstellen. Es gab nur eine Implementierung des Dolmetschers, und die Sprache hat sich mit ihm weiterentwickelt. Dieser Interpreter steht zusammen mit seinen Funktionstests als de facto Spezifikation der Sprache. Perl 6 begann jedoch mit einer Spezifikation, und mehrere Projekte zielen darauf ab, einen Teil oder die gesamte Spezifikation zu implementieren.

Anwendungen

Perl hat viele und unterschiedliche Anwendungen, die durch die Verfügbarkeit vieler Standard- und Drittanbietermodule ergänzt werden.

Perl wurde hauptsächlich zum Schreiben von CGI- Skripten verwendet: große Projekte, die in Perl geschrieben wurden, umfassen cPanel , Slash , Bugzilla , RT , TWiki und Movable Type ; Zu den stark frequentierten Websites, die Perl ausgiebig verwenden, gehören Priceline.com , Craigslist , IMDb , LiveJournal , DuckDuckGo , Slashdot und Ticketmaster . Es ist auch eine optionale Komponente des beliebten LAMP- Technologie-Stacks für die Webentwicklung anstelle von PHP oder Python . Perl wird in der Debian- Linux- Distribution häufig als Systemprogrammiersprache verwendet .

Perl wird oft als Glue-Sprache verwendet , um Systeme und Schnittstellen zu verbinden, die nicht speziell für die Interoperabilität entwickelt wurden, und zum " Data Munging ", dh zum Konvertieren oder Verarbeiten großer Datenmengen für Aufgaben wie das Erstellen von Berichten. Tatsächlich sind diese Stärken eng miteinander verbunden. Die Kombination macht Perl eine beliebte Universal-Sprache für Systemadministratoren , vor allem , weil kurze Programmen, die oft als „ one-liner Programme “ eingegeben und auf einer einzelnen ausgeführt werden können Befehlszeilen .

Perl-Code kann über Windows und Unix portabel gemacht werden ; ein solcher Code wird häufig von Softwareanbietern (sowohl COTS als auch maßgeschneidert) verwendet, um das Paketieren und die Wartung von Software-Build- und Deployment-Skripten zu vereinfachen.

Perl/Tk und wxPerl werden häufig verwendet, um grafische Benutzeroberflächen zu Perl-Skripten hinzuzufügen .

Implementierung

Perl ist als Core-Interpreter implementiert, geschrieben in C, zusammen mit einer großen Sammlung von Modulen, geschrieben in Perl und C. Ab 2010 besteht der Interpreter aus 150.000 Zeilen C-Code und kompiliert zu einer 1 MB ausführbaren Datei auf typischen Maschinenarchitekturen. Alternativ kann der Interpreter in eine Linkbibliothek kompiliert und in andere Programme eingebettet werden. Die Distribution enthält fast 500 Module, die 200.000 Zeilen Perl und zusätzliche 350.000 Zeilen C-Code umfassen (ein Großteil des C-Codes in den Modulen besteht aus Zeichencodierungstabellen ).

Der Interpreter hat eine objektorientierte Architektur. Alle Elemente der Perl-Sprache – Skalare, Arrays, Hashes, Coderefs, Datei-Handles – werden im Interpreter durch C-Strukturen repräsentiert . Operationen auf diesen Strukturen werden durch eine große Sammlung von Makros , typedefs und Funktionen definiert; diese bilden die Perl-C- API . Die Perl-API kann für Uneingeweihte verwirrend sein, aber ihre Einstiegspunkte folgen einem konsistenten Namensschema , das den Benutzern eine Anleitung bietet.

Das Leben eines Perl-Interpreters teilt sich grob in eine Kompilierphase und eine Ausführungsphase. In Perl sind die Phasen die wichtigsten Phasen im Lebenszyklus des Interpreters. Jeder Dolmetscher durchläuft jede Phase nur einmal und die Phasen folgen in einer festen Reihenfolge.

Das meiste, was in der Kompilierungsphase von Perl passiert, ist die Kompilierung, und das meiste, was in der Ausführungsphase von Perl passiert, ist die Ausführung, aber es gibt bedeutende Ausnahmen. Perl macht großen Gebrauch von seiner Fähigkeit, Perl-Code während der Kompilierungsphase auszuführen. Perl verzögert auch die Kompilierung in die Ausführungsphase. Die Begriffe, die die Art der Verarbeitung angeben, die zu einem bestimmten Zeitpunkt tatsächlich stattfindet, sind Kompilierzeit und Laufzeit . Perl befindet sich während der Kompilierungsphase an den meisten Punkten in der Kompilierzeit, aber die Kompilierzeit kann auch während der Ausführungsphase eingegeben werden. Die Kompilierungszeit für Code in einem an die evalintegrierte Komponente übergebenen Zeichenfolgenargument erfolgt während der Ausführungsphase. Perl befindet sich während der Kompilierungsphase häufig in der Laufzeit und verbringt den größten Teil der Laufzeit in der Laufzeit. Code in BEGINBlöcken wird zur Laufzeit ausgeführt, jedoch in der Kompilierphase.

Zur Kompilierzeit parst der Interpreter Perl-Code in einen Syntaxbaum . Zur Laufzeit führt es das Programm aus, indem es den Baum durchläuft . Text wird nur einmal geparst, und der Syntaxbaum wird vor der Ausführung optimiert, sodass die Ausführung relativ effizient ist. Optimierungen zur Kompilierzeit des Syntaxbaums umfassen konstante Faltung und Kontextausbreitung, aber es wird auch eine Guckloch-Optimierung durchgeführt.

Perl hat eine Turing-vollständige Grammatik, da das Parsen durch den während der Kompilierungsphase ausgeführten Laufzeitcode beeinflusst werden kann. Daher kann Perl nicht durch eine reine Lex / Yacc- Lexer / Parser- Kombination geparst werden . Stattdessen implementiert der Interpreter seinen eigenen Lexer, der mit einem modifizierten GNU-Bison- Parser koordiniert , um Mehrdeutigkeiten in der Sprache aufzulösen.

Es wird oft gesagt, dass "Nur Perl kann Perl analysieren", was bedeutet, dass nur der Perl-Interpreter ( perl) die Perl-Sprache ( Perl ) analysieren kann , aber selbst das stimmt im Allgemeinen nicht. Da der Perl-Interpreter während seiner Kompilierungsphase eine Turing-Maschine simulieren kann, müsste er in jedem Fall das Halteproblem lösen , um das Parsen abzuschließen. Es ist ein langjähriges Ergebnis, dass das Halteproblem unentscheidbar ist und daher nicht einmal Perl Perl immer parsen kann. Perl trifft die ungewöhnliche Entscheidung, dem Benutzer in seiner eigenen Kompilierungsphase Zugriff auf seine volle Programmierleistung zu geben. Die Kosten in Bezug auf die theoretische Reinheit sind hoch, aber praktische Unannehmlichkeiten scheinen selten zu sein.

Andere Programme, die es sich zur Aufgabe machen, Perl zu parsen, wie Sourcecode-Analyzer und Auto-Indenter , haben nicht nur mit mehrdeutigen syntaktischen Konstrukten zu kämpfen, sondern auch mit der Unentscheidbarkeit des Perl-Parsings im Allgemeinen. Das PPI-Projekt von Adam Kennedy konzentrierte sich darauf, Perl-Code als Dokument zu parsen (wobei seine Integrität als Dokument erhalten bleibt), anstatt Perl als ausführbaren Code zu parsen (was nicht einmal Perl selbst immer kann). Es war Kennedy, der zuerst vermutete, dass "das Parsen von Perl unter dem 'Halteproblem' leidet", was später bewiesen wurde.

Perl wird mit über 250.000 Funktionstests für die Kernsprache Perl und über 250.000 Funktionstests für Kernmodule vertrieben. Diese laufen als Teil des normalen Build-Prozesses und trainieren den Interpreter und seine Kernmodule ausgiebig. Perl-Entwickler verlassen sich auf die Funktionstests, um sicherzustellen, dass Änderungen am Interpreter keine Softwarefehler verursachen ; Darüber hinaus können Perl-Benutzer, die sehen, dass der Interpreter seine Funktionstests auf ihrem System besteht, ein hohes Maß an Vertrauen darauf haben, dass er ordnungsgemäß funktioniert.

Verfügbarkeit

Perl ist sowohl unter der Artistic License 1.0 als auch unter der GNU General Public License doppelt lizenziert . Für die meisten Betriebssysteme sind Distributionen verfügbar . Es ist besonders auf Unix und Unix-ähnlichen Systemen verbreitet, wurde aber auf die meisten modernen (und viele veraltete) Plattformen portiert. Mit nur sechs gemeldeten Ausnahmen kann Perl aus dem Quellcode auf allen POSIX -kompatiblen oder anderweitig Unix-kompatiblen Plattformen kompiliert werden.

Aufgrund ungewöhnlicher Änderungen, die für die klassische Mac OS- Umgebung erforderlich waren , wurde ein spezieller Port namens MacPerl unabhängig ausgeliefert.

Das Comprehensive Perl Archive Network führt eine vollständige Liste der unterstützten Plattformen mit Links zu den jeweils verfügbaren Distributionen. CPAN ist auch die Quelle für öffentlich verfügbare Perl-Module, die nicht Teil der Kern-Perl-Distribution sind.

Fenster

Benutzer von Microsoft Windows installieren normalerweise eine der nativen Binärdistributionen von Perl für Win32, am häufigsten Strawberry Perl oder ActivePerl . Das Kompilieren von Perl aus Quellcode unter Windows ist möglich, aber den meisten Installationen fehlen die erforderlichen C-Compiler und Build-Tools. Dies erschwert auch die Installation von Modulen aus dem CPAN, insbesondere solche, die teilweise in C geschrieben sind.

ActivePerl ist eine Closed-Source-Distribution von ActiveState mit regelmäßigen Releases, die die Kern-Releases von Perl verfolgen. Die Distribution umfasste zuvor den Perl-Paketmanager (PPM), ein beliebtes Tool zum Installieren, Entfernen, Aktualisieren und Verwalten der Verwendung gängiger Perl-Module; Dieses Tool wurde jedoch ab ActivePerl 5.28 eingestellt. Enthalten ist auch PerlScript , eine Windows Script Host (WSH)-Engine, die die Perl-Sprache implementiert. Visual Perl ist ein ActiveState-Tool, das Perl zur Visual Studio .NET-Entwicklungssuite hinzufügt. Ein VBScript- to-Perl-Konverter sowie ein Perl-Compiler für Windows und Konverter von awk und sed zu Perl wurden ebenfalls von dieser Firma produziert und sind auf der ActiveState-CD für Windows enthalten , die alle ihre Distributionen sowie das Komodo . enthält IDE und alle außer der ersten auf der Unix/Linux/Posix-Variante davon im Jahr 2002 und später.

Strawberry Perl ist eine Open-Source-Distribution für Windows. Es hat seit Januar 2008 regelmäßige, vierteljährliche Releases, einschließlich neuer Module, wenn Feedback und Anfragen eingehen. Strawberry Perl zielt darauf ab, Module wie Standard-Perl-Distributionen auf anderen Plattformen installieren zu können, einschließlich der Kompilierung von XS-Modulen.

Die Emulationsschicht von Cygwin ist eine weitere Möglichkeit, Perl unter Windows auszuführen. Cygwin bietet eine Unix-ähnliche Umgebung unter Windows, und sowohl Perl als auch CPAN sind als vorkompilierte Standardpakete im Cygwin-Setup-Programm verfügbar. Da Cygwin auch gcc enthält , ist es auch möglich, Perl aus dem Quellcode zu kompilieren.

Eine ausführbare Perl-Datei ist in mehreren Windows Resource Kits im Verzeichnis mit anderen Skripttools enthalten.

Implementierungen von Perl kommen mit dem MKS Toolkit , Interix (die Basis früherer Implementierungen von Windows Services für Unix ) und UWIN .

Datenbankschnittstellen

Die Textverarbeitungsfunktionen von Perl können zum Generieren von SQL- Abfragen verwendet werden; Arrays, Hashes und die automatische Speicherverwaltung erleichtern das Sammeln und Verarbeiten der zurückgegebenen Daten. In Tim Bunces Perl DBI Application Programming Interface (API) können die Argumente für die API beispielsweise der Text von SQL-Abfragen sein; so ist es möglich, in mehreren Sprachen gleichzeitig zu programmieren (zB zum Generieren einer Webseite mit HTML , JavaScript und SQL in einem Here-Dokument ). Die Verwendung der Perl- Variableninterpolation zur programmgesteuerten Anpassung jeder der SQL-Abfragen und die Spezifikation von Perl-Arrays oder -Hashes als Strukturen, um die resultierenden Datensätze aus jeder SQL-Abfrage programmgesteuert zu speichern , ermöglicht einen High-Level-Mechanismus für die Verarbeitung großer Datenmengen zur Nachbearbeitung durch ein Perl-Unterprogramm. In frühen Versionen von Perl wurden Datenbankschnittstellen erstellt, indem der Interpreter erneut mit einer clientseitigen Datenbankbibliothek verbunden wurde. Dies war so schwierig, dass es nur für einige der wichtigsten und am weitesten verbreiteten Datenbanken durchgeführt wurde, und beschränkte die resultierende perlausführbare Datei auf die Verwendung nur einer Datenbankschnittstelle gleichzeitig.

In Perl 5 werden Datenbankschnittstellen durch Perl-DBI-Module implementiert. Das DBI-Modul (Database Interface) bietet eine einzige, datenbankunabhängige Schnittstelle zu Perl-Anwendungen, während die DBD-Module (Database Driver) die Details des Zugriffs auf etwa 50 verschiedene Datenbanken übernehmen; Es gibt DBD-Treiber für die meisten ANSI- SQL- Datenbanken.

DBI bietet Caching für Datenbank-Handles und Abfragen, was die Leistung in langlebigen Ausführungsumgebungen wie mod perl erheblich verbessern kann und hochvolumigen Systemen hilft, Lastspitzen wie beim Slashdot-Effekt zu vermeiden .

In modernen Perl-Anwendungen, insbesondere solchen, die mit Web-Frameworks wie Catalyst geschrieben wurden , wird das DBI-Modul oft indirekt über objektrelationale Mapper wie DBIx::Class , Class::DBI oder Rose::DB::Object verwendet, die SQL-Abfragen generieren und behandeln Daten transparent für den Anwendungsautor.

Vergleichsleistung

Das Computer Language Benchmarks Game vergleicht die Leistung von Implementierungen typischer Programmierprobleme in mehreren Programmiersprachen. Die eingereichten Perl-Implementierungen arbeiten normalerweise am oberen Ende des Speichernutzungsspektrums und liefern unterschiedliche Geschwindigkeitsergebnisse. Die Performance von Perl im Benchmark-Spiel ist typisch für interpretierte Sprachen.

Große Perl-Programme starten langsamer als ähnliche Programme in kompilierten Sprachen, da Perl bei jeder Ausführung den Quellcode kompilieren muss. In einem Vortrag auf der Konferenz YAPC::Europe 2005 und dem anschließenden Artikel "A Timely Start" stellte Jean-Louis Leroy fest, dass die Ausführung seiner Perl-Programme viel länger dauerte als erwartet, da der Perl-Interpreter viel Zeit damit verbrachte, Module in seinem übergroßen Pfad enthalten. Anders als Java, Python und Ruby bietet Perl nur experimentelle Unterstützung für die Vorkompilierung. Daher zahlen Perl-Programme diese Overhead-Strafe bei jeder Ausführung. Die Ausführungsphase typischer Programme ist lang genug, sodass die amortisierte Startzeit nicht wesentlich ist, aber Benchmarks, die sehr kurze Ausführungszeiten messen, werden aufgrund dieses Overheads wahrscheinlich verzerrt.

Eine Reihe von Instrumenten wurde eingeführt, um diese Situation zu verbessern. Das erste derartige Tool war mod perl von Apache , das einen der häufigsten Gründe für den schnellen Aufruf kleiner Perl-Programme angehen wollte: die CGI- Webentwicklung . ActivePerl bietet über Microsoft ISAPI ähnliche Leistungsverbesserungen.

Sobald Perl-Code kompiliert ist, entsteht während der Ausführungsphase ein zusätzlicher Overhead, der bei Programmen, die in kompilierten Sprachen wie C oder C++ geschrieben sind, normalerweise nicht vorhanden ist. Beispiele für einen solchen Overhead umfassen die Bytecode- Interpretation, die Speicherverwaltung mit Referenzzählung und die dynamische Typprüfung.

Optimierung

Die kritischsten Routinen können in anderen Sprachen (wie C ) geschrieben werden, die über einfache Inline-Module oder den komplexeren, aber flexiblen XS- Mechanismus an Perl angebunden werden können .

Perl 5

Perl 5, die üblicherweise als "Perl" bezeichnete Sprache, wird weiterhin aktiv weiterentwickelt. Perl 5.12.0 wurde im April 2010 mit einigen neuen Funktionen veröffentlicht, die vom Design von Perl 6 beeinflusst wurden, gefolgt von Perl 5.14.1 (veröffentlicht am 17. Juni 2011), Perl 5.16.1 (veröffentlicht am 9. August 2012). und Perl 5.18.0 (veröffentlicht am 18. Mai 2013). Die Entwicklerversionen von Perl 5 werden monatlich veröffentlicht, wobei die Hauptversionen einmal im Jahr erscheinen.

Der relative Anteil der Internetsuchen nach „Perl-Programmierung“ im Vergleich zu ähnlichen Suchen nach anderen Programmiersprachen ist von etwa 10 % im Jahr 2005 auf etwa 2 % im Jahr 2011 auf etwa 0,7 % im Jahr 2020 stetig zurückgegangen.

Raku (Perl 6)

Camelia , das Logo für das Perl 6-Projekt

Auf der Perl-Konferenz 2000 plädierte Jon Orwant für eine große neue Sprachinitiative. Dies führte zu der Entscheidung, mit der Arbeit an einem Redesign der Sprache zu beginnen, die Perl 6 genannt werden sollte. Vorschläge für neue Sprachfunktionen wurden von der gesamten Perl-Community erbeten, die mehr als 300 RFCs einreichte .

Wand verbrachte die nächsten paar Jahren die RFCs zu verdauen und sie in einen einheitlichen Rahmen für Perl 6. Er stellte seinen Entwurf für Perl 6 in einer Reihe von Dokumenten als „Apokalypsen“ Synthese - nummeriert zu entsprechen Kapitel in Programmierung Perl . Ab Januar 2011 wurde die Entwicklungsspezifikation von Perl 6 in Designdokumenten namens Synopses gekapselt – nummeriert, um Apocalypses zu entsprechen.

Die von Wall betreute Diplomarbeit von Bradley M. Kuhn betrachtete die mögliche Verwendung der Java Virtual Machine als Laufzeitumgebung für Perl. Kuhns Dissertation hat gezeigt, dass dieser Ansatz problematisch ist. Im Jahr 2001 wurde beschlossen, dass Perl 6 auf einer sprachübergreifenden virtuellen Maschine namens Parrot laufen würde . Dies bedeutet, dass andere Sprachen, die auf den Papagei abzielen, nativen Zugang zu CPAN erhalten , was eine gewisse sprachübergreifende Entwicklung ermöglicht.

2005 schuf Audrey Tang das Pugs- Projekt, eine Implementierung von Perl 6 in Haskell . Diese fungierte und fungiert weiterhin als Testplattform für die Sprache Perl 6 (getrennt von der Entwicklung der eigentlichen Implementierung) – und ermöglichte es den Sprachdesignern, diese zu erkunden. Das Pugs-Projekt hat eine aktive, sprachenübergreifende Perl/Haskell-Community hervorgebracht, die sich um den IRC-Kanal Libera Chat #raku dreht. Viele funktionale Programmiereinflüsse wurden vom Perl 6-Designteam absorbiert.

Im Jahr 2012 konzentrierte sich die Entwicklung von Perl 6 hauptsächlich auf zwei Compiler:

  1. Rakudo , eine Implementierung, die auf der Parrot Virtual Machine und der Java Virtual Machine ausgeführt wird.
  2. Niecza , das auf die Common Language Runtime abzielt .

2013 wurde MoarVM („Metamodel On A Runtime“) angekündigt , eine C-basierte virtuelle Maschine, die hauptsächlich für Rakudo entwickelt wurde.

Im Oktober 2019 wurde Perl 6 in Raku umbenannt.

Ab 2017 befinden sich nur die Rakudo-Implementierung und MoarVM in aktiver Entwicklung, und andere virtuelle Maschinen wie die Java Virtual Machine und JavaScript werden unterstützt.

Perl 7

Perl 7 wurde am 24. Juni 2020 auf der "The Perl Conference in the Cloud" als Nachfolger von Perl 5 angekündigt. Basierend auf Perl 5.32 ist Perl 7 abwärtskompatibel zu modernem Perl 5-Code; Perl 5-Code ohne Boilerplate (Pragma)-Header muss hinzugefügt werden use compat::perl5;, um kompatibel zu bleiben, aber moderner Code kann einen Teil des Boilerplates fallen lassen.

Perl-Community

Die Kultur und Gemeinschaft von Perl hat sich parallel zur Sprache selbst entwickelt. Das Usenet war der erste öffentliche Ort, an dem Perl eingeführt wurde, aber im Laufe seiner Entwicklung wurde die Perl-Gemeinschaft durch das Wachstum von Internet-basierten Diensten einschließlich der Einführung des World Wide Web geprägt. Die Community rund um Perl war tatsächlich das Thema von Walls erstem "State of the Onion"-Vortrag.

Zustand der Zwiebel

State of the Onion ist der Name für Walls jährliche Keynote- artige Zusammenfassungen über den Fortschritt von Perl und seiner Community. Sie zeichnen sich durch seinen charakteristischen Humor aus, der sich auf Perls Kultur, die allgemeine Hackerkultur, Walls sprachlichen Hintergrund, manchmal sein Familienleben und manchmal sogar seinen christlichen Hintergrund bezieht.

Jeder Vortrag wird zunächst auf verschiedenen Perl-Konferenzen gehalten und schließlich auch online veröffentlicht.

Perle Zeitvertreib

JAPHs
In E-Mail-, Usenet- und Message-Board-Postings sind " Just Another Perl Hacker " (JAPH)-Programme ein weit verbreiteter Trend, der von Randal L. Schwartz , einem der ersten professionellen Perl-Trainer, stammt. Im Sprachgebrauch der Perl-Kultur werden Perl-Programmierer als Perl-Hacker bezeichnet, und daraus leitet sich die Praxis ab, kurze Programme zu schreiben, um den Ausdruck "Nur ein weiterer Perl-Hacker" auszudrucken. Im Geiste des ursprünglichen Konzepts sind diese Programme mäßig verschleiert und kurz genug, um in die Signatur einer E-Mail oder Usenet-Nachricht zu passen. Das "kanonische" JAPH, wie es von Schwartz entwickelt wurde, enthält das Komma am Ende, obwohl dieses oft weggelassen wird.
Perlgolf
Perl "Golf" ist der Zeitvertreib, die Anzahl der in einem Perl-Programm verwendeten Zeichen (Tasten-"Anschläge") auf das Nötigste zu reduzieren, ähnlich wie Golfspieler versuchen, so wenig Schläge wie möglich in einer Runde zu machen. Die erste Verwendung des Satzes betonte den Unterschied zwischen Fußgängercode, der einem Neuling beibringen soll, und knappen Hacks, die wahrscheinlich erfahrene Perl-Programmierer amüsieren, ein Beispiel für letztere sind JAPHs , die bereits in Signaturen in Usenet-Postings und anderswo verwendet wurden. Ähnliche Stunts waren in den vergangenen Jahrzehnten in der Sprache APL ein namenloser Zeitvertreib gewesen. Die Verwendung von Perl zum Schreiben eines Programms, das RSA- Verschlüsselung durchführte, weckte ein weit verbreitetes und praktisches Interesse an diesem Zeitvertreib. In den Folgejahren wurde der Begriff „ Codegolf “ in anderen Sprachen für den Zeitvertreib verwendet. Im Juli 2000 fand auf der Perl Conference 4.0 in Monterey, Kalifornien, eine Perl Golf Apocalypse statt.
Verschleierung
Wie bei C waren Wettbewerbe mit verschleiertem Code in den späten 1990er Jahren ein bekannter Zeitvertreib. Der Obfuscated Perl Contest war ein Wettbewerb, der von 1996 bis 2000 vom Perl Journal veranstaltet wurde und der die syntaktische Flexibilität von Perl zu einer Haupttugend machte. Auszeichnungen wurden für Kategorien wie „am mächtigsten“ – Programme, die den Platz effizient nutzten – und „beste vierzeilige Signatur“ für Programme vergeben, die in vier Zeilen mit 76 Zeichen im Stil eines Usenet- Signaturblocks passen .
Poesie
Perl-Poesie ist die Praxis, Gedichte zu schreiben, die als legaler Perl-Code kompiliert werden können, zum Beispiel das als Black Perl bekannte Stück . Perl-Poesie wird durch die große Anzahl englischer Wörter ermöglicht, die in der Perl-Sprache verwendet werden. Regelmäßig werden der Community bei PerlMonks neue Gedichte vorgelegt .

Perl im IRC

Es gibt eine Reihe von IRC- Kanälen, die Unterstützung für die Sprache und einige Module bieten.

IRC-Netzwerk Kanäle
irc.libera.chat #perl #raku
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 #perlhilfe
irc.rizon.net #perl
irc.debian.org #debian-perl (Verpackung von Perl-Modulen für Debian)

CPAN-Acme

Es gibt auch viele Beispiele für Code, der ausschließlich zur Unterhaltung auf dem CPAN geschrieben wurde . Lingua::Romana::Perligataermöglicht beispielsweise das Schreiben von Programmen in lateinischer Sprache . Bei der Ausführung eines solchen Programms übersetzt das Modul seinen Quellcode in normales Perl und führt es aus.

Die Perl-Gemeinde hat den Namensraum " Acme " für Module reserviert, die Spaß machen (aber sein Umfang wurde erweitert, um explorativen oder experimentellen Code oder jedes andere Modul einzuschließen, das niemals in der Produktion verwendet werden soll). Einige der Acme-Module sind bewusst auf amüsante Weise implementiert. Dazu gehört Acme::Bleach, eines der ersten Module im Acme::Namensraum, das es ermöglicht, den Quellcode des Programms "aufzuhellen" (dh alle Zeichen durch Leerzeichen zu ersetzen) und trotzdem zu funktionieren.

Beispielcode

In älteren Versionen von Perl würde man das Hello World- Programm folgendermaßen schreiben :

print "Hello, World!\n";

Hier ist ein komplexeres Perl-Programm, das Sekunden von einem gegebenen Startwert herunterzählt:

#!/usr/bin/perl
use strict;
use warnings;

my ( $remaining, $total );

$remaining = $total = shift(@ARGV);

STDOUT->autoflush(1);

while ( $remaining ) {
    printf ( "Remaining %s/%s \r", $remaining--, $total );
    sleep 1;
}

print "\n";

Der Perl-Interpreter kann auch für einmalige Skripte auf der Kommandozeile verwendet werden. Das folgende Beispiel (wie von einer sh-kompatiblen Shell wie Bash aufgerufen) übersetzt die Zeichenfolge "Bob" in allen Dateien mit der Endung .txt im aktuellen Verzeichnis in "Robert":

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

Kritik

Perl wurde von seinen Kritikern als " Linienrauschen " und eine Nur-Schreib-Sprache bezeichnet . Die früheste Erwähnung dieser Art findet sich in der Erstausgabe des Buches Learning Perl , einem Lehrbuch zu Perl 4 von Randal L. Schwartz , in dessen erstem Kapitel er sagt: "Ja, manchmal sieht Perl für den Uneingeweihten wie Zeilenrauschen aus, aber für den erfahrenen Perl-Programmierer sieht es aus wie Checksummen-Zeilenrauschen mit einer Lebensaufgabe." Er erklärte auch, dass der Vorwurf, Perl sei eine Nur-Schreib-Sprache, vermieden werden könne, indem man mit „richtiger Sorgfalt“ kodiere. Die Perl - Übersicht Dokument perlintro besagt , dass die Namen der eingebauten „magic“ skalare Variablen „aussehen wie Zeichensetzung oder Leitungsrauschen“. Das Englischmodul bietet jedoch sowohl lange als auch kurze englische Alternativen. Das perlstyle- Dokument gibt an, dass Zeilenrauschen in regulären Ausdrücken durch den /xModifikator zum Hinzufügen von Leerzeichen verringert werden könnte .

Laut den FAQ zu Perl 6 wurde Perl 6 entwickelt, um "die üblichen Verdächtigen" zu mildern, die Perl 5-Kritikern die Behauptung "Zeilenrauschen" entlocken, einschließlich der Entfernung "der Mehrheit der Satzzeichenvariablen" und der Bereinigung der Regex-Syntax . In den FAQ zu Perl 6 heißt es auch, dass das, was manchmal als Perls Zeilenrauschen bezeichnet wird, "die eigentliche Syntax der Sprache" ist, genauso wie Gerundien und Präpositionen ein Teil der englischen Sprache sind . In einem Blog-Eintrag vom Dezember 2012 erklärte chromatic , dass das Design von Perl 6 eine „gut definierte Grammatik“ sowie eine verbessertes Typsystem, ein vereinheitlichtes Objektsystem mit einem intelligenten Metamodell, Metaoperatoren und einem klareren Kontextsystem, das solche Feinheiten wie allgegenwärtige Faulheit bereitstellt". Er erklärte auch, dass "Perl 6 eine Kohärenz und eine Konsistenz hat, die Perl 5 fehlt."

Siehe auch

Verweise

Weiterlesen

Externe Links