All Topics  
Perl

 
Perl

   Email Print
   Bookmark   Link






 

Perl



 
 
In computer programming, Perl is a high-level
High-level programming language

In computing, a high-level programming language is a programming language with strong Abstraction from the details of the computer. In comparison to low-level programming languages, it may use natural language elements, be easier to use, or more Porting across platforms....
, general-purpose, interpreted
Interpreter (computing)

In computer science, an interpreter normally means a computer program that execution , i.e. performs, instructions written in a programming language....
, dynamic programming language
Dynamic programming language

Dynamic programming language is a term used broadly in computer science to describe a class of high-level programming languages that execute at runtime many common behaviors that other languages might perform during compiler, if at all....
. Perl was originally developed by Larry Wall
Larry Wall

Larry Wall is a programmer and author, most widely known for his creation of the Perl programming language in 1987....
, a linguist
Linguistics

Linguistics is the science study of natural language. Linguistics encompasses a number of sub-fields. An important topical division is between the study of language structure and the study of Meaning ....
 working as a systems administrator for NASA
NASA

The National Aeronautics and Space Administration is an agency of the Federal government of the United States, responsible for the nation's public list of space agencies....
, in 1987, as a general purpose Unix
Unix

Unix is a computer operating system originally developed in 1969 by a group of American Telephone & Telegraph employees at Bell Labs, including Ken Thompson , Dennis Ritchie, Douglas McIlroy, and Joe Ossanna....
 scripting language to make report processing easier. Since then, it has undergone many changes and revisions and become widely popular among programmers. Larry Wall continues to oversee development of the core language, and its coming version, Perl 6
Perl 6

Perl 6 is a planned major revision to the Perl programming language. It is a language specification which introduces elements of many modern and historical languages....
.

Perl borrows features from other programming languages including C
C (programming language)

C is a general-purpose computer programming language originally developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories to implement the Unix operating system....
, shell script
Shell script

A shell script is a Scripting language written for the Shell , or command line interpreter, of an operating system. It is often considered a simple domain-specific programming language....
ing (sh
Bourne shell

The Bourne shell, or sh, was the default Unix shell of Version 7 Unix, and replaced the Thompson shell, whose executable file had the same name, sh....
), AWK
AWK (programming language)

AWK is a programming language that is designed for processing text-based data, either in files or data streams, and was created at Bell Labs in the 1970s....
, and sed
Sed

sed is a Unix utility which parses text files and implements a programming language which can apply textual transformations to such files. It reads input files line by line , applying the operation which has been specified via the command line , and then outputs the line....
.






Discussion
Ask a question about 'Perl'
Start a new discussion about 'Perl'
Answer questions from other users
Full Discussion Forum



Encyclopedia


In computer programming, Perl is a high-level
High-level programming language

In computing, a high-level programming language is a programming language with strong Abstraction from the details of the computer. In comparison to low-level programming languages, it may use natural language elements, be easier to use, or more Porting across platforms....
, general-purpose, interpreted
Interpreter (computing)

In computer science, an interpreter normally means a computer program that execution , i.e. performs, instructions written in a programming language....
, dynamic programming language
Dynamic programming language

Dynamic programming language is a term used broadly in computer science to describe a class of high-level programming languages that execute at runtime many common behaviors that other languages might perform during compiler, if at all....
. Perl was originally developed by Larry Wall
Larry Wall

Larry Wall is a programmer and author, most widely known for his creation of the Perl programming language in 1987....
, a linguist
Linguistics

Linguistics is the science study of natural language. Linguistics encompasses a number of sub-fields. An important topical division is between the study of language structure and the study of Meaning ....
 working as a systems administrator for NASA
NASA

The National Aeronautics and Space Administration is an agency of the Federal government of the United States, responsible for the nation's public list of space agencies....
, in 1987, as a general purpose Unix
Unix

Unix is a computer operating system originally developed in 1969 by a group of American Telephone & Telegraph employees at Bell Labs, including Ken Thompson , Dennis Ritchie, Douglas McIlroy, and Joe Ossanna....
 scripting language to make report processing easier. Since then, it has undergone many changes and revisions and become widely popular among programmers. Larry Wall continues to oversee development of the core language, and its coming version, Perl 6
Perl 6

Perl 6 is a planned major revision to the Perl programming language. It is a language specification which introduces elements of many modern and historical languages....
.

Perl borrows features from other programming languages including C
C (programming language)

C is a general-purpose computer programming language originally developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories to implement the Unix operating system....
, shell script
Shell script

A shell script is a Scripting language written for the Shell , or command line interpreter, of an operating system. It is often considered a simple domain-specific programming language....
ing (sh
Bourne shell

The Bourne shell, or sh, was the default Unix shell of Version 7 Unix, and replaced the Thompson shell, whose executable file had the same name, sh....
), AWK
AWK (programming language)

AWK is a programming language that is designed for processing text-based data, either in files or data streams, and was created at Bell Labs in the 1970s....
, and sed
Sed

sed is a Unix utility which parses text files and implements a programming language which can apply textual transformations to such files. It reads input files line by line , applying the operation which has been specified via the command line , and then outputs the line....
. The language provides powerful text processing facilities without the arbitrary data length limits of many contemporary Unix tools, facilitating easy manipulation of text file
Text file

A text file is a kind of computer file that is structured as a sequence of line . A text file exists within a computer file system. The end of a text file is often denoted by placing one or more special characters, known as an end-of-file marker, after the last line in a text file....
s. It is also used for graphics programming
Graphics

Graphics are visual presentations on some surface, such as a wall, canvas, computer screen, paper, or stone to brand, inform, illustrate, or entertain....
, system administration
System administrator

A system administrator, systems administrator, or sysadmin, is a person employed to maintain and operate a computer system and/or computer network....
, network programming
Computer network programming

In computing, network programming, essentially identical to Internet socket programming or client-server programming, involves writing computer programs that communicate with other programs across a computer network....
, applications that require database
Database

A database is a structured collection of records or data that is stored in a computer system. The structure is achieved by organizing the data according to a database model....
 access and CGI programming
Common Gateway Interface

The Common Gateway Interface is a Standardization Protocol for interfacing external application software with an Server , commonly a web server....
 on the Web
World Wide Web

The World Wide Web is a very large set of interlinked hypertext documents accessed via the Internet. With a Web browser, one can view Web pages that may contain writing, s, videos, and other multimedia and navigate between them using hyperlinks....
. Perl is nicknamed "the Swiss Army chainsaw
Swiss Army knife

A Swiss Army knife , is a brand of multi-function pocket knife or multi-tool. Generally speaking, a Military of Switzerland knife has a blade as well as various tools, such as screwdrivers and can openers....
 of programming languages" due to its flexibility and adaptability.

History

Larry Wall
Larry Wall

Larry Wall is a programmer and author, most widely known for his creation of the Perl programming language in 1987....
 began work on Perl in 1987, while working as a programmer at Unisys
Unisys

Unisys Corporation , based in Blue Bell, Pennsylvania, Pennsylvania, United States, and incorporated in Delaware, is a global provider of information technology services and programs....
, and released version 1.0 to the comp.sources.misc newsgroup
Newsgroup

A newsgroup is a repository usually within the Usenet system, for messages Posting style from many users in different locations. The term may be confusing to some, because it is usually a discussion group....
 on December 18, 1987. The language expanded rapidly over the next few years. Perl 2, released in 1988, featured a better regular expression
Regular expression

In computing, regular expressions provide a concise and flexible means for identifying strings of text of interest, such as particular characters, words, or patterns of characters....
 engine. Perl 3, released in 1989, added support for binary data streams.

Originally the only documentation for Perl was a single (increasingly lengthy) man page
Manual page (Unix)

Almost all substantial Unix and Unix-like operating systems have extensive documentation known as man pages . The Unix command used to display them is man....
. In 1991, Programming perl
Programming Perl

Programming Perl,ISBN 0-596-00027-8,best known as the Camel Book among programmers, is a book about writing programs using the Perl programming language....
  (known to many Perl programmers as the "Camel Book") was published and became the de facto reference for the language. At the same time, the Perl version number was bumped to 4—not to mark a major change in the language but to identify the version that was documented by the book.

Perl 4 went through a series of maintenance releases, culminating in Perl 4.036 in 1993. At that point, Wall abandoned Perl 4 to begin work on Perl 5.

Initial design of Perl 5 continued into 1994. The perl5-porters mailing list
Mailing list

A mailing list is a collection of names and addresses used by an individual or an organization to send material to multiple recipients. The term is often extended to include the people subscribed to such a list, so the group of subscribers is referred to as "the mailing list", or simply "the list"....
 was established in May 1994 to coordinate work on porting Perl 5 to different platforms. It remains the primary forum for development, maintenance, and porting of Perl 5.

Perl 5 was released on October 17, 1994. It was a nearly complete rewrite of the interpreter
Interpreter (computing)

In computer science, an interpreter normally means a computer program that execution , i.e. performs, instructions written in a programming language....
, and it added many new features to the language, including objects, references, lexical (my) variables
Local variable

In computer science, a local variable is a variable that is given local scope . Such a variable is accessible only from the subroutine or statement block in which it is declared....
, and modules. Importantly, modules provided a mechanism for extending the language without modifying the interpreter. This allowed the core interpreter to stabilize, even as it enabled ordinary Perl programmers to add new language features.

, Perl 5 is still being actively maintained. Important features and some essential new language constructs—including Unicode
Unicode

Unicode is a computing industry standard allowing computers to consistently represent and manipulate Character expressed in most of the world's writing systems....
 support, threads
Thread (computer science)

In computer science, a thread of execution is a Fork of a computer program into two or more Concurrency running task s. The implementation of threads and process es differs from one operating system to another, but in most cases, a thread is contained inside a process....
, improved support for object oriented programming, and many other enhancements—have been added along the way.

On December 18, 2007, the 20th anniversary of Perl 1.0, Perl 5.10.0 was released. Perl 5.10.0 includes notable new features, which bring it closer to Perl 6
Perl 6

Perl 6 is a planned major revision to the Perl programming language. It is a language specification which introduces elements of many modern and historical languages....
. Some of these new features are a new switch statement
Switch statement

In computer programming, a switch statement is a type of control Statement that exists in most modern imperative programming languages . Its purpose is to allow the value of a variable or expression to control the flow of program execution....
 (called "given"/"when"), regular expressions updates, and the so-called smart match operator, "~~". In December 2008, Perl 5.8.9 was released.

One of the most important events in Perl 5 history took place outside of the language proper and was a consequence of its module support. On October 26, 1995, the Comprehensive Perl Archive Network (CPAN) was established as a repository
Repository

A repository can be:* Repository clone, a concept from distributed revision control* Component repository management, a field of configuration management...
 for Perl modules and Perl itself. At the time of writing, it carries more than 15,000 modules by more than 7,000 authors. CPAN is widely regarded as one of the greatest strengths of Perl in practice.

Name

Perl was originally named "Pearl," after the Parable of the Pearl
Parable of the Pearl

The Parable of the Pearl or the Pearl of Great Price is a parable told by Jesus in explaining the value of the Kingdom of Heaven, according to Gospel of Matthew ....
 from the Gospel of Matthew
Gospel of Matthew

The Gospel of Matthew is one of the four canonical gospels in the New Testament and is a synoptic gospel. It narrates an account of the New Testament view on Jesus' life and Ministry of Jesus of Jesus of Nazareth....
. Larry Wall wanted to give the language a short name with positive connotations; he claims that he considered (and rejected) every three- and four-letter word in the dictionary. He also considered naming it after his wife Gloria. Wall discovered the existing PEARL programming language before Perl's official release and changed the spelling of the name.

When referring to the language, the name is normally capitalized (Perl). When referring to the interpreter program itself, the name is often uncapitalized (perl) because Unix-like file systems are case-sensitive. Before the release of the first edition of Programming Perl, it was common to refer to the language as perl; Randal L. Schwartz
Randal L. Schwartz

Randal L. Schwartz is an United States author, system administrator and programming consultant. Schwartz is the co-author of several widely used books about Perl, a programming language, and has written regular columns about Perl for several computer magazines....
, however, capitalised the language's name in the book to make it stand out better when typeset. This case distinction was subsequently documented as canonical.

There is some contention about the all-caps spelling "PERL," which the documentation declares incorrect and which some core community members even consider a sign of outsiders
Shibboleth

Shibboleth is any distinguishing practice which is indicative of one's social or regional origin.It usually refers to features of language, and particularly to a word whose pronunciation identifies its speaker as being a member or not a member of a particular group....
. Although the name is occasionally taken as an acronym for Practical Extraction and Report Language (which appears at the top of the documentation), this expansion actually came after the name
Backronym

A backronym is a reverse Acronym and initialism, a phrase constructed after the fact to make an existing word or words into an acronym.Backronyms may be invented with serious or humorous intent, or may be a type of false or folk etymology....
; several others have been suggested as equally canonical, including Wall's own humorous Pathologically Eclectic Rubbish Lister. Indeed, Wall claims that the name was intended to inspire many different expansions.

The camel symbol

Programming Perl
Programming Perl

Programming Perl,ISBN 0-596-00027-8,best known as the Camel Book among programmers, is a book about writing programs using the Perl programming language....
, published by O'Reilly Media
O'Reilly Media

O'Reilly Media is an American Mass media company established by Tim O'Reilly that publishes books and web sites and produces conferences on computer technology topics....
, features a picture of a camel
Camel

Camels are even-toed ungulates within the genus Camelus. The dromedary, one-humped or Arabian camel has a single hump and is well known for its healthy low fat milk, and the Bactrian camel has two humps....
 on the cover and is commonly referred to as The Camel Book. This image of a camel has become a general symbol of Perl. It is also a hacker emblem
Emblem

An emblem is a pictorial , abstract art or representational, that epitomizes a concept ? e.g., a moral truth, or an allegory ? or that represents a person, such as a Monarch or Saint symbology....
, appearing on some T-shirt
T-shirt

A T-shirt is a shirt which is pulled on over the head to cover most of a person's torso. A T-shirt is usually buttonless, collarless, and pocketless, with a round neck and short sleeves....
s and other clothing items.

O'Reilly owns the image as a trademark but claims to use their legal rights only to protect the "integrity and impact of that symbol". O'Reilly allows non-commercial use of the symbol and provides Programming Republic of Perl logos and Powered by Perl buttons. However, the Camel has never been meant to be an official Perl symbol, and if one is to be considered instead, it's an onion.

Overview

Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development
Web development

Web development is a broad term for any activity related to developing a web site for the World Wide Web or an intranet. This can include e-commerce business development, web design, web content development, Client-side scripting/server-side scripting programming, and web server configuration....
, network programming
Computer network programming

In computing, network programming, essentially identical to Internet socket programming or client-server programming, involves writing computer programs that communicate with other programs across a computer network....
, and GUI
Gui

Gui or guee is a generic term to refer to grillinged dishes in Korean cuisine. These most commonly have meat or fish as their primary ingredient, but may in some cases also comprise grilled vegetables or other vegetarian ingredients....
 development.

The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). Its major features include support for multiple programming paradigm
Programming paradigm

A programming paradigm is a fundamental style of computer programming. . Paradigms differ in the concepts and abstractions used to represent the elements of a program and the steps that compose a computation ....
s (procedural, object-oriented
Object-oriented programming

Object-oriented programming is a programming paradigm that uses "Object_" and their interactions to design applications and computer programs....
, and functional
Functional programming

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of function s and avoids program state and immutable object data....
 styles), reference counting
Reference counting

In computer science, reference counting is a technique of storing the number of references, pointers, or handles to a resource such as an object or block of memory....
 memory management
Memory management

Memory management is the act of managing computer memory. In its simpler forms, this involves providing ways to allocate portions of memory to programs at their request, and freeing it for reuse when no longer needed....
 (without a cycle-detecting garbage collector), built-in support for text processing, and a large collection of third-party modules.

According to Larry Wall, Perl has two slogans. The first is "There's more than one way to do it," commonly known as TMTOWTDI. The second slogan is "Easy things should be easy and hard things should be possible."

Features

The overall structure of Perl derives broadly from C. Perl is procedural in nature, with variable
Variable

A variable is a symbol that stands for a value that may vary; the term usually occurs in opposition to constant, which is a symbol for a non-varying value, i.e....
s, expressions
Expression (programming)

An expression in a programming language is a combination of value s, variables, operator s, and function s that are interpreted according to the particular Order of operations and of association for a particular programming language, which computes and then produces another value....
, assignment statements, brace
Bracket

Brackets are punctuation marks used in pairs to set apart or interject text within other text. In computer science, the term is sometimes said to strictly apply to the square or box type....
-delimited code blocks, control structures, and subroutine
Subroutine

In computer science, a subroutine or subprogram is a portion of computer code within a larger computer program, which performs a specific task and is relatively independent of the remaining code....
s.

Perl also takes features from shell programming. All variables are marked with leading sigils
Sigil (computer programming)

In computer programming, a sigil is a symbol attached to a variable name, showing the variable's datatype or Scope . The term was first applied to Perl usage by Philip Gwyn in 1999 to replace the more cumbersome "funny character in front of a variable name"....
, which unambiguously identify the data type (for example, scalar, array, hash) of the variable in context. Importantly, sigils allow variables to be interpolated directly into strings. Perl has many built-in functions that provide tools often used in shell programming (although many of these tools are implemented by programs external to the shell) such as sorting, and calling on system facilities.

Perl takes lists
List (computing)

In computer science, a list is an ordered Multiset of entity/items.In the context of object-oriented programming languages, a list is defined as an instance of an abstract data type , formalizing the concept of an order theoryed Collection class of entity....
 from Lisp, associative array
Associative array

An associative array is an abstract data type composed of a Collection of unique keys and a collection of values, where each key is associated with one value ....
s (hashes) from AWK, and regular expression
Regular expression

In computing, regular expressions provide a concise and flexible means for identifying strings of text of interest, such as particular characters, words, or patterns of characters....
s from sed
Sed

sed is a Unix utility which parses text files and implements a programming language which can apply textual transformations to such files. It reads input files line by line , applying the operation which has been specified via the command line , and then outputs the line....
. These simplify and facilitate many parsing, text-handling, and data-management tasks.

In Perl 5, features were added that support complex data structure
Data structure

A data structure in computer science is a way of storing data in a computer so that it can be used efficiently. It is an organization of mathematical and logical concepts of data....
s, first-class function
First-class function

In computer science, a programming language is said to support first-class functions if it treats function s as first-class objects. Specifically, this means that the language supports constructing new functions during the execution of a program, storing them in data structures, passing them as arguments to other functions, and returning the...
s (that is, closures
Closure (computer science)

In computer science, a closure is a function that is evaluated in an environment containing one or more bound variables. When called, the function can access these variables....
 as values), and an object-oriented programming model. These include references
Reference (computer science)

In computer science, a reference is an object containing information about how to locate and access the particular data item, as opposed to containing the data itself....
, packages, class-based method dispatch, and lexically scoped variables
Scope (programming)

In computer programming, scope is an enclosing context where values and expressions are associated. Various programming languages have various types of scopes....
, along with compiler directives (for example, the strict pragma). A major additional feature introduced with Perl 5 was the ability to package code as reusable modules. Larry Wall later stated that "The whole intent of Perl 5's module system was to encourage the growth of Perl culture rather than the Perl core."

All versions of Perl do automatic data typing and memory management. The interpreter knows the type and storage requirements of every data object in the program; it allocates and frees storage for them as necessary using reference counting
Reference counting

In computer science, reference counting is a technique of storing the number of references, pointers, or handles to a resource such as an object or block of memory....
 (so it cannot de-allocate circular data structures without manual intervention). Legal type conversions—for example, conversions from number to string—are done automatically at run time; illegal type conversions are fatal errors.

Design

The design of Perl can be understood as a response to three broad trends in the computer industry: falling hardware costs, rising labor costs, and improvements in compiler technology. Many earlier computer languages, such as Fortran
Fortran

Fortran is a general-purpose programming language, procedural programming language, imperative programming language programming language that is especially suited to numerical analysis and scientific computing....
 and C, were designed to make efficient use of expensive computer hardware. In contrast, Perl is designed to make efficient use of expensive computer programmers.

Perl has many features that ease the programmer's task at the expense of greater CPU and memory requirements. These include automatic memory management; dynamic typing; strings, lists, and hashes; regular expressions; introspection; and an eval function.

Wall was trained as a linguist, and the design of Perl is very much informed by linguistic principles. Examples include Huffman coding
Huffman coding

In computer science and information theory, Huffman coding is an entropy encoding algorithm used for lossless data compression. The term refers to the use of a variable-length code table for encoding a source symbol where the variable-length code table has been derived in a particular way based on the estimated probability of occurrence for...
 (common constructions should be short), good end-weighting (the important information should come first), and a large collection of language primitives. Perl favors language constructs that are concise and natural for humans to read and write, even where they complicate the Perl interpreter.

Perl syntax reflects the idea that "things that are different should look different." For example, scalars, arrays, and hashes have different leading sigils
Sigil (computer programming)

In computer programming, a sigil is a symbol attached to a variable name, showing the variable's datatype or Scope . The term was first applied to Perl usage by Philip Gwyn in 1999 to replace the more cumbersome "funny character in front of a variable name"....
. Array indices and hash keys use different kinds of braces. Strings and regular expressions have different standard delimiters. This approach can be contrasted with languages such as Lisp
Lisp programming language

Lisp is a family of computer programming languages with a long history and a distinctive, fully parenthesized syntax. Originally specified in 1958, Lisp is the second-oldest high-level programming language in widespread use today; only Fortran is older....
, where the same S-expression
S-expression

The term S-expression or sexp refers to a convention for representing semi-structured data in human-readable textual form. S-expressions are probably best known for their use in the Lisp programming language family of programming languages....
 construct and basic syntax are used for many different purposes.

Perl does not enforce any particular programming paradigm (procedural, object-oriented, functional, and others) or even require the programmer to choose among them.

There is a broad practical bent to both the Perl language and the community and culture that surround it. The preface to Programming Perl begins, "Perl is a language for getting your job done." One consequence of this is that Perl is not a tidy language. It includes many features, tolerates exceptions to its rules, and employs heuristics to resolve syntactical ambiguities. Because of the forgiving nature of the compiler, bugs can sometimes be hard to find. Discussing the variant behaviour of built-in functions in list and scalar contexts, the perlfunc(1) manual page says, "In general, they do what you want, unless you want consistency."

In addition to Larry Wall's two slogans mentioned above, Perl has several mottos that convey aspects of its design and use, including "Perl: the Swiss Army Chainsaw of Programming Languages" and "No unnecessary limits". Perl has also been called "The Duct Tape of the Internet".

No written specification or standard for the Perl language exists, and there are no plans to create one for the current version of Perl. There has been only one implementation of the interpreter, and the language has evolved along with it. That interpreter, together with its functional tests, stands as a de facto specification of the language.

Applications

Perl has many and varied applications, compounded by the availability of many standard and third-party modules.

Perl has been used since the early days of the Web to write CGI
Common Gateway Interface

The Common Gateway Interface is a Standardization Protocol for interfacing external application software with an Server , commonly a web server....
 scripts. It is known as one of "the three Ps" (along with Python
Python (programming language)

Python is a general-purpose high-level programming language. Its design philosophy emphasizes code readability. Python's core syntax and semantics are Minimalism , while the standard library is large and comprehensive....
 and PHP
PHP

PHP is a scripting language originally designed for producing dynamic web pages. It has evolved to include a command line interface capability and can be used in Standalone software Graphical user interface....
), the most popular dynamic languages for writing Web applications. It is also an integral component of the popular LAMP
LAMP (software bundle)

The acronym LAMP refers to a solution stack of software, usually free and open source software, used to run dynamic Web sites or Server s. The original expansion is as follows:...
 solution stack
Solution stack

In computing, a solution stack is a set of software subsystems or components needed to deliver a fully functional solution, e.g. a product or service....
 for web development. Large projects written in Perl include Slash
Slash (weblog system)

Slash is the collection of free software Perl Module and stand-alone Computer program which runs Slashdot, one of the oldest and most popular collaborative software weblogs in existence....
, Bugzilla
Bugzilla

Bugzilla is a World Wide Web-based general-purpose bugtracker tool originally developed and used by the Mozilla project, and software license under the Mozilla Public License....
, RT
Request Tracker

Request Tracker, commonly abbreviated to RT, is a Ticket tracking system written in Perl used to coordination task s and manage requests among a community of users....
, TWiki
TWiki

TWiki is a structured wiki, typically used to run a collaboration platform, knowledge management or document management system, a knowledge base, or team portal....
, and Movable Type
Movable Type

Movable Type is a blog software developed by the company Six Apart. It was publicly announced on 3 September 2001, and version 1.0 was publicly released on 8 October 2001....
. Many high-traffic websites use Perl extensively. Examples include bbc.co.uk
Bbc.co.uk

BBC Online is the brand name and home for the BBC's United Kingdom online service. It is a large network of websites including such high profile sites as BBC News and Sport, the on demand video and radio services co-branded BBC iPlayer, the pre-school site Cbeebies, and learning services such as Bitesize....
, Amazon.com
Amazon.com

Amazon.com, Inc. is an American electronic commerce company in Seattle, Washington. It is America's largest online retailer, with nearly three times the internet sales revenue of runner up Staples, Inc....
, LiveJournal
LiveJournal

LiveJournal is a virtual community where Internet users can keep a blog, journal or diary. LiveJournal is also the name of the free software and open source software Server software that was designed to run the LiveJournal virtual community....
, Ticketmaster
Ticketmaster

Ticketmaster Entertainment, Inc. is a ticket sales and distribution company based in West Hollywood, California, United States, with operations in many countries around the world....
, Slashdot
Slashdot

Slashdot, sometimes abbreviated as /., is a technology-related news website owned by SourceForge, Inc. It features user-submitted and editor-evaluated current affairs news with a "nerdy" slant....
, Craigslist
Craigslist

Craigslist is a centralized network of online communities, featuring free Online classified advertising ? with jobs, internships, housing, personal advertisement, erotic services, for sale/barter/wanted, services, community, gigs, r?sum?s, and pets categories ? and Internet forum on various topics....
, Zappos.com
Zappos.com

Zappos.com is an electronic commerce company specializing in Shoe and is currently based in Henderson, Nevada, USA. The company warehouse is located in Shepherdsville, Kentucky, along with an outlet store....
 and IMDb
Internet Movie Database

The Internet Movie Database is an online database of information related to film, actors, Television program, production crew personnel, video games, and most recently, fictional characters featured in visual entertainment media....
.

Perl is often used as a glue language
Glue language

A glue language is a programming language used for connecting software components together.Examples of glue languages:* Shell scripts* Python ...
, tying together systems and interfaces that were not specifically designed to interoperate, and for "data munging", that is, converting or processing large amounts of data for tasks such as creating reports. In fact, these strengths are intimately linked. The combination makes Perl a popular all-purpose language for system administrator
System administrator

A system administrator, systems administrator, or sysadmin, is a person employed to maintain and operate a computer system and/or computer network....
s, particularly because short programs can be entered and run on a single command line.

With a degree of care, Perl code can be made portable across Windows and Unix. Portable Perl code is often used by suppliers of software (both COTS
Commercial off-the-shelf

Commercial, off-the-shelf is a term for Computer software or hardware, generally technology or computer products, that are ready-made and available for sale, lease, or license to the general public....
 and bespoke) to simplify packaging and maintenance of software build and deployment scripts.

Graphical user interfaces (GUIs) may be developed using Perl. In particular, Perl/Tk is commonly used to enable user interaction with Perl scripts. Such interaction may be synchronous or asynchronous using callbacks to update the GUI. For more information about the technologies involved, see Tk,Tcl
Tcl

Tcl is a scripting language created by John Ousterhout. Originally "born out of frustration"?according to the author?with programmers devising their own languages intended to be embedded into applications, Tcl quickly gained wide acceptance on its own and is generally thought to be easy to learn, but powerful in competent hands....
, and WxPerl
WxPerl

wxPerl is a perl module by Mattia Barbon, allowing the creation of graphical user interface from Perl. It is built as a XS -wrapper for the WxWidgets . Like perl and wxWidgets, wxPerl is free software....
.

Perl is also widely used in finance and bioinformatics
Bioinformatics

Bioinformatics is the application of information technology to the field of molecular biology. The term bioinformatics was coined by Paulien Hogeweg in 1978 for the study of informatic processes in biotic systems....
, where it is valued for rapid application development and deployment and for its capability to handle large data sets.

Implementation

Perl is implemented as a core interpreter, written in C, together with a large collection of modules, written in Perl and C. The source distribution is, , 12 MB
Megabyte

Megabyte is a SI prefix-multiple of the unit byte for digital information computer storage or transmission and is equal to 106 bytes....
 when packaged in a tar file
Tar (file format)

In computing, tar is both a file format and the name of the program used to handle such files. The format was created in the early days of Unix and standardized by POSIX.1-1988 and later POSIX.1-2001....
 and compressed
Data compression

In computer science and information theory, data compression or source coding is the process of encoding information using fewer bits than an code representation would use through use of specific encoding schemes....
. The interpreter is 150,000 lines of C code and compiles to a 1 MB executable on typical machine architectures. Alternatively, the interpreter can be compiled to a link library and embedded in other programs. There are nearly 500 modules in the distribution, comprising 200,000 lines of Perl and an additional 350,000 lines of C code. (Much of the C code in the modules consists of character-encoding tables.)

The interpreter has an object-oriented architecture. All of the elements of the Perl language—scalars, arrays, hashes, coderefs, file handles—are represented in the interpreter by C structs. Operations on these structs are defined by a large collection of macros, typedefs, and functions; these constitute the Perl C API. The Perl API can be bewildering to the uninitiated, but its entry points follow a consistent naming scheme, which provides guidance to those who use it.

The life of a Perl interpreter divides broadly into a compile phase and a run phase. In Perl, the phases are the major stages in the interpreter's life cycle. Each interpreter goes through each phase only once, and the phases follow in a fixed sequence.

Most of what happens in Perl's compile phase is compilation, and most of what happens in Perl's run phase is execution, but there are significant exceptions. Perl makes important use of its capability to execute Perl code during the compile phase. Perl will also delay compilation into the run phase. The terms that indicate the kind of processing that is actually occurring at any moment are compile time and run time. Perl is in compile time at most points during the compile phase, but compile time may also be entered during the run phase. The compile time for code in a string argument passed to the eval
Eval

In some programming languages, eval is a subroutine which evaluates a string as though it were an expression and returns a result; in others, it executes multiple lines of code as though they had been included instead of the line including the eval....
built-in occurs during the run phase. Perl is often in run time during the compile phase and spends most of the run phase in run time. Code in BEGIN blocks executes at run time but in the compile phase.

At compile time, the interpreter parses Perl code into a syntax tree. At run time, it executes the program by walking the tree. Text is parsed only once, and the syntax tree is subject to optimization before it is executed, so that execution is relatively efficient. Compile-time optimizations on the syntax tree include constant folding
Constant folding

In compiler theory, constant folding and constant propagation are related compiler optimizations used by many modern compilers. A more advanced form of constant propagation known as sparse conditional constant propagation may be utilized to simultaneously remove dead code and more accurately propagate constants....
 and context propagation, but peephole optimization
Peephole optimization

In compiler theory, peephole optimization is a kind of optimization performed over a very small set of instructions in a segment of generated code....
 is also performed.

Perl has a Turing-complete grammar
Grammar

Grammar is the field of linguistics that covers the conventions governing the use of any given natural language. It includes morphology and syntax, often complemented by phonetics, phonology, semantics, and pragmatics....
 because parsing can be affected by run-time code executed during the compile phase. Therefore, Perl cannot be parsed by a straight Lex
Lex programming tool

In computer science, lex is a Computer program that generates lexical analysiss . Lex is commonly used with the yacc parser generator. Lex, originally written by Eric Schmidt and Mike Lesk, is the standard lexical analyzer generator on many Unix systems, and a tool exhibiting its behavior is specified as part of the POSIX standard....
/Yacc
Yacc

The computer program yacc is a parser generator developed by Stephen C. Johnson at AT&T for the Unix operating system. The name is an acronym for "Yet Another Compiler Compiler." It generates a parsing based on an Formal grammar written in a notation similar to Backus-Naur form....
 lexer/parser combination. Instead, the interpreter implements its own lexer, which coordinates with a modified GNU bison
GNU bison

GNU bison is a parser generator that is part of the GNU project. Bison converts a Formal grammar description for a context-free grammar into a C or C++ program which can parse a sequence of tokens that conforms to that grammar ....
 parser to resolve ambiguities in the language.

It is often said that "Only perl can parse Perl," meaning that only the Perl interpreter (perl) can parse the Perl language (Perl), but even this is not, in general, true. Because the Perl interpreter can simulate a Turing machine during its compile phase, it would need to decide the Halting Problem
Halting problem

In computability theory , the halting problem is a decision problem which can be stated as follows: given a description of a computer program and a finite input, decide whether the program finishes running or will run forever, given that input....
 in order to complete parsing in every case. It's a long-standing result that the Halting Problem is undecidable, and therefore not even Perl can always parse Perl. Perl makes the unusual choice of giving the user access to its full programming power in its own compile phase. The cost in terms of theoretical purity is high, but practical inconvenience seems to be rare.

Other programs that undertake to parse Perl, such as source-code analyzers and auto-indenters, have to contend not only with ambiguous syntactic constructs but also with the undecidability of Perl parsing in the general case. Adam Kennedy's PPI project focused on parsing Perl code as a document (retaining its integrity as a document), instead of parsing Perl as executable code (which not even Perl itself can always do). It was Kennedy who first conjectured that, "parsing Perl suffers from the 'Halting Problem
Halting problem

In computability theory , the halting problem is a decision problem which can be stated as follows: given a description of a computer program and a finite input, decide whether the program finishes running or will run forever, given that input....
'.", and this was later proved.

Perl is distributed with some 120,000 functional tests. These run as part of the normal build process and extensively exercise the interpreter and its core modules. Perl developers rely on the functional tests to ensure that changes to the interpreter do not introduce bugs; conversely, Perl users who see that the interpreter passes its functional tests on their system can have a high degree of confidence that it is working properly.

Maintenance of the Perl interpreter has become increasingly difficult over the years. The code base has been in continuous development since 1994. The code has been optimized for performance at the expense of simplicity, clarity, and strong internal interfaces. New features have been added, yet virtually complete backward compatibility with earlier versions is maintained. The size and complexity of the interpreter is a barrier to developers who wish to work on it.

Availability

Perl is free software
Free software

Free Software or software libre is software that can be used, studied, and modified without restriction, and which can be copied and redistributed in modified or unmodified form either without restriction, or with minimal restrictions only to ensure that further recipients can also do these things and to prevent consumer-facing hardware...
 and is licensed under both the Artistic License
Artistic License

The Artistic License refers most commonly to the original Artistic License , a software license used for certain free software packages, most notably the standard Perl implementation and most CPAN modules, which are dual-licensed under the Artistic License and the GNU General Public License ....
 and the GNU General Public License
GNU General Public License

The GNU General Public License is a widely used free software license, originally written by Richard Stallman for the GNU project. The GPL is the most popular and well-known example of the type of strong copyleft license that requires derived works to be available under the same copyleft....
. Distributions are available for most operating system
Operating system

An operating system is an interface between hardware and applications; it is responsible for the management and coordination of activities and the sharing of the limited resources of the computer....
s. It is particularly prevalent on Unix
Unix

Unix is a computer operating system originally developed in 1969 by a group of American Telephone & Telegraph employees at Bell Labs, including Ken Thompson , Dennis Ritchie, Douglas McIlroy, and Joe Ossanna....
 and Unix-like
Unix-like

A Unix-like operating system is one that behaves in a manner similar to a Unix system, while not necessarily conforming to or being certified to any version of the Single UNIX Specification....
 systems, but it has been ported to most modern (and many obsolete) platforms. With only six reported exceptions, Perl can be compiled from source code
Source code

In computer science, source code is any collection of statements or declarations written in some human-readable computer programming language....
 on all Unix-like, POSIX
POSIX

POSIX or "Portable Operating System Interface" is the collective name of a family of related standardizations specified by the Institute of Electrical and Electronics Engineers to define the application programming interface , along with shell and utilities interfaces for software compatible with variants of the Unix operating system, altho...
-compliant, or otherwise-Unix-compatible platforms. However, this is rarely necessary, because Perl is included in the default installation of many popular operating systems.

Because of unusual changes required for the Mac OS Classic
Mac OS history

On January 24, 1984, Apple Computer, Inc. introduced the Macintosh personal computer, with the Macintosh 128K model, which came bundled with the Mac OS operating system, then known as the System Software....
 environment, a special port called MacPerl was shipped independently.

The CPAN carries a complete list of supported platforms with links to the distributions available on each.

Windows

Users of Microsoft Windows
Microsoft Windows

Microsoft Windows is a series of software operating systems and graphical user interfaces produced by Microsoft. Microsoft first introduced an operating environment named Windows in November 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces ....
 typically install one of the native binary distributions of Perl for Win32, most commonly ActivePerl. Compiling Perl from source code
Source code

In computer science, source code is any collection of statements or declarations written in some human-readable computer programming language....
 under Windows is possible, but most installations lack the requisite C compiler and build tools. This also makes it difficult to install modules from the CPAN, particularly those that are partially written in C.

Users of the ActivePerl binary distribution are, therefore, dependent on the repackaged modules provided in ActiveState
ActiveState

ActiveState is a Canadian proprietary software company headquartered in Vancouver, British Columbia that develops, sells, and supports cross-platform software development tools for dynamic programming language such as Perl, PHP, Python , Ruby , and Tcl, as well as Software distribution and enterprise services....
’s module repository, which are precompiled and can be installed with PPM
Perl package manager

Perl Package Manager is a Perl utility intended to simplify the tasks of locating, installing, upgrading and removing software packages. It can determine if the most recent version of a software package is installed on a system, and can install or upgrade that package from a local or remote host....
. Limited resources to maintain this repository have been cause for various long-standing problems.

To address this and other problems of Perl on the Windows platform, was launched by Adam Kennedy on behalf of The Perl Foundation
The Perl Foundation

The Perl Foundation is dedicated to the advancement of the Perl programming language through open discussion, collaboration, design, and code. The Perl Foundation is a non-profit organization, 501 organization based in Grand Ledge, Michigan....
 in June 2006. This is a community website for "all things Windows and Perl." A major aim of this project is to provide production-quality alternative Perl distributions that include an embedded C compiler and build tools, so as to enable Windows users to install modules directly from the CPAN. The production distribution in the family is known as , with research and experimental work done in a related distribution.

Another popular way of running Perl under Windows is provided by the Cygwin
Cygwin

Cygwin is a Unix-like environment and command-line interface for Microsoft Windows. Cygwin provides native integration of Windows-based applications, data, and other system resources with applications, software tools, and data of the Unix-like environment....
 emulation layer. Cygwin provides a Unix-like environment on Windows, and both perl and cpan are conveniently available as standard pre-compiled packages in the Cygwin setup program. Because Cygwin also includes the gcc
GNU Compiler Collection

The GNU Compiler Collection is a compiler system produced by the GNU Project supporting various programming languages. GCC is a key component of the GNU toolchain....
, compiling Perl from source is also possible.

Language structure

In Perl, the minimal Hello world program may be written as follows: print "Hello, world!\n" This prints
Input/output

In computing, input/output, or I/O, refers to the communication between an information processing system , and the outside world ? possibly a human, or another information processing system....
 the string
String (computer science)

In computer programming and some branches of mathematics, a string is an ordered sequence of symbols. These symbols are chosen from a predetermined set or alphabet....
 Hello, world! and a newline
Newline

In computing, a newline is a special character or sequence of characters signifying the end of a line of text. The name comes from the fact that the next character after the newline will appear on a new line?that is, on the next line below the text, immediately proceeding the newline....
, symbolically expressed by an n character whose interpretation is altered by the preceding escape character
Escape character

In computing and telecommunication, an escape character is a single character which in a sequence of characters signifies that what is to follow takes an alternative interpretation....
 (a backslash).

The canonical form of the program is slightly more verbose:

  1. !/usr/bin/perl
print "Hello, world!\n";

The hash mark character introduces a comment
Comment (computer programming)

In computer programming, a comment is a programming language construct used to embed programmer-readable annotations in the source code of a computer program....
 in Perl, which runs up to the end of the line of code and is ignored by the compiler. The comment used here is of a special kind: it’s called the shebang
Shebang (Unix)

In computing, a shebang refers to the characters "#!" when they are the first two characters in a script file. Unix-like operating systems take the presence of these two characters as an indication that the file is a script, and try to execute that script using the interpreter specified by the rest of the first line in the file....
 line. This tells Unix-like operating systems where to find the Perl interpreter, making it possible to invoke the program without explicitly mentioning perl. (Note that, on Microsoft Windows
Microsoft Windows

Microsoft Windows is a series of software operating systems and graphical user interfaces produced by Microsoft. Microsoft first introduced an operating environment named Windows in November 1985 as an add-on to MS-DOS in response to the growing interest in graphical user interfaces ....
 systems, Perl programs are typically invoked by associating the .pl extension
Filename extension

A filename extension is a substring to the filename of a computer file applied to indicate the encoding convention of its contents.In some operating systems it is optional, while in some others it is a requirement....
 with the Perl interpreter. In order to deal with such circumstances, perl detects the shebang line and parses it for switches; therefore, it is not strictly true that the shebang line is ignored by the compiler.)

The second line in the canonical form includes a semicolon, which is used to separate statements in Perl. With only a single statement in a block or file, a separator is unnecessary, so it can be omitted from the minimal form of the program—or more generally from the final statement in any block or file. The canonical form includes it because it is common to terminate every statement even when it is unnecessary to do so, as this makes editing easier: code can be added to, or moved away from, the end of a block or file without having to adjust semicolons.

Version 5.10 of Perl introduces a say function that implicitly appends a newline character to its output, making the minimal "Hello world" program even shorter:

say 'Hello, world!'

Data types

Perl has a number of fundamental data type
Data type

A data type in programming languages is an attribute of a data which tells the computer something about the kind of data it is. This involves setting constraints on the datum, such as what values it can take and what operations may be performed upon it....
s. The most commonly used and discussed are scalars
Scalar (computing)

In computing, a scalar is a variable or field that can hold only one value at a time; as opposed to composite variables like array, List , object composition, etc....
, array
Array

In computer science, an array is a data structure consisting of a group of element s that are accessed by index . In most programming languages each element has the same data type and the array occupies a contiguous area of computer memory....
s, hashes
Hash table

In computer science, a hash table, or a hash map, is a data structure that associates Unique key with value .The primary operation that hash functions support efficiently is a lookup: given a key , find the corresponding value ....
, filehandles, and subroutines:
  • A scalar
    Scalar (computing)

    In computing, a scalar is a variable or field that can hold only one value at a time; as opposed to composite variables like array, List , object composition, etc....
     is a single value; it may be a number, a string
    String (computer science)

    In computer programming and some branches of mathematics, a string is an ordered sequence of symbols. These symbols are chosen from a predetermined set or alphabet....
    , or a reference
    Reference (computer science)

    In computer science, a reference is an object containing information about how to locate and access the particular data item, as opposed to containing the data itself....
    .
  • An array
    Array

    In computer science, an array is a data structure consisting of a group of element s that are accessed by index . In most programming languages each element has the same data type and the array occupies a contiguous area of computer memory....
     is an ordered collection of scalars.
  • A hash, or associative array
    Associative array

    An associative array is an abstract data type composed of a Collection of unique keys and a collection of values, where each key is associated with one value ....
    , is a map from strings to scalars; the strings are called keys, and the scalars are called values.
  • A file handle is a map to a file, device, or pipe that is open for reading, writing, or both.
  • A subroutine is a piece of code that may be passed arguments, be executed, and return data


Most variables are marked by a leading sigil
Sigil (computer programming)

In computer programming, a sigil is a symbol attached to a variable name, showing the variable's datatype or Scope . The term was first applied to Perl usage by Philip Gwyn in 1999 to replace the more cumbersome "funny character in front of a variable name"....
, which identifies the data type being accessed (not the type of the variable itself), except filehandles, which don't have a sigil. The same name may be used for variables of different data types, without conflict.

$foo # a scalar @foo # an array %foo # a hash FOO # a file handle &foo # a subroutine (but the & is optional)

File handles and constants need not be uppercase, but it is a common convention because there is no sigil to denote them. Both are global in scope, but file handles are interchangeable with references to file handles, which can be stored in scalars, which in turn permit lexical scoping. Doing so is encouraged in Damian Conway
Damian Conway

Damian Conway is a prominent member of the Perl community, a proponent of object-oriented programming, and the author of #Books. He is also an Associate Professor in the Faculty of Information Technology at Monash University....
's Perl Best Practices. As a convenience, the open function in Perl 5.6 and newer will autovivify undefined scalars to file handle references.

Numbers are written in the bare form; strings are enclosed by quotes of various kinds.

$name = "joe"; $color = 'red';

$number1 = 42; $number2 = '42';

  1. This evaluates to true
if ($number1

$number2)

$answer = "The answer is $number1"; # Variable interpolation: The answer is 42 $price = 'This device costs $42'; # No interpolation in single quotes

$album = "It's David Bowie's \"Heroes\""; # literal quotes inside a string; $album = 'It\'s David Bowie\'s "Heroes"'; # same as above with single quotes; $album = q(It's David Bowie's "Heroes"); # the quote-like operators q and qq allow # almost any delimiter instead of quotes, to # avoid excessive backslashing

$multilined_string =<

Perl will convert strings into numbers and vice versa depending on the context in which they are used. In the following example, the strings $n and $m are treated as numbers when they are the arguments to the addition operator. This code prints the number '5', discarding non-numeric information for the operation, although the variable values remain the same. (The string concatenation operator is the period, not the + symbol.)

$n = '3 apples'; $m = '2 oranges'; print $n + $m;

Perl also has a boolean context that it uses in evaluating conditional statements. The following values all evaluate as false in Perl:

$false = 0; # the number zero $false = 0.0; # the number zero as a float $false = 0b0; # the number zero in binary $false = 0x0; # the number zero in hexadecimal $false = '0'; # the string zero $false = ""; # the empty string $false = undef; # the return value from undef

All other values are evaluated to true. This includes the odd self-describing literal string of "0 but true," which in fact is 0 as a number, but true when used as a boolean. (Any non-numeric string would also have this property, but this particular string is ignored by Perl with respect to numeric warnings.) A less-explicit but more conceptually portable version of this string is '0E0' or '0e0', which does not rely on characters being evaluated as 0, because '0E0' is literally "zero times ten to the zeroth power."

Evaluated boolean expressions also return scalar values. Although the documentation does not promise which particular true or false is returned (and thus cannot be relied on), many boolean operators return 1 for true and the empty-string for false (which evaluates to zero in a numeric context). The defined function tells if the variable has any value set. In the above examples, defined($false) is true for every value except undef.

If a specifically 1 or 0 result (as in C) is needed, an explicit conversion is thought by some authors to be required:

my $real_result = $boolean_result ? 1 : 0;

However, if it's known that the value is either 1 or undef, an implicit conversion can be used instead:

my $real_result = $boolean_result + 0;

A list is written by listing its elements, separated by commas, and enclosed by parentheses where required by operator precedence.

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

It can be written many other ways as well, some straightforward and some less so:

  1. An explicit and straightforward way
@scores = ('32', '45', '16', '5');

  1. Equivalent to the above, but the qw quote-like operator saves typing of
  2. quotes and commas and reduces visual clutter; almost any delimiter can be
  3. used instead of parentheses
@scores = qw(32 45 16 5);

  1. The split function returns a list of strings, which are extracted
  2. from the expression using a regex template.
  3. This may be useful for reading from a file of comma-separated values (CSV)
@scores = split /,/, '32,45,16,5';

  1. It's also possible to use a postfix for operator and aliasing of
  2. the $_ magic variable to the next value of the list during each
  3. iteration; this is pointless here, but similar idioms are widely used
  4. in some circumstances.
push @scores, $_ foreach 32, 45, 16, 5;

A hash may be initialized from a list of key/value pairs:

%favorite = ( joe => 'red', sam => 'blue' );

The => operator is equivalent to a comma, except that it assumes quotes around the preceding token if it is a bare identifier: (joe => 'red') is the same as ('joe' => 'red'). It can therefore be used to elide quote marks, improving readability.

Individual elements of a list are accessed by providing a numerical index, in square brackets. Individual values in a hash are accessed by providing the corresponding key, in curly braces. The $ sigil identifies the accessed element as a scalar.

$scores[2] # an element of @scores $favorite # a value in %favorite

Thus, a hash can also be specified by setting its keys individually:

$favorite = 'red'; $favorite = 'blue';

Multiple elements may be accessed by using the @ sigil instead (identifying the result as a list).

@scores[2, 3, 1] # three elements of @scores @favorite # two values in %favorite @favorite # same as above

The number of elements in an array can be obtained by evaluating the array in scalar context or with the help of the $# sigil. The latter gives the index of the last element in the array, not the number of elements. Note: the syntax highlighting
Syntax highlighting

Syntax highlighting is a feature of some text editors that displays text—especially source code—in different colors and typefaces according to the category of terms....
 in Wikipedia's software mistakenly considers some of the following code to be part of the comments.


$count = @friends; # Assigning to a scalar forces scalar context

$#friends; # The index of the last element in @friends $#friends+1; # Usually the number of elements in @friends is one more # than $#friends because the first element is at index 0, # not 1, unless the programmer reset this to a different # value, which most Perl manuals discourage.

There are a few functions that operate on entire hashes.

@names = keys %addressbook; @addresses = values %addressbook;

  1. Every call to each returns the next key/value pair.
  2. All values will be eventually returned, but their order
  3. cannot be predicted.
while (($name, $address) = each %addressbook)

  1. Similar to the above, but sorted alphabetically
foreach my $next_name (sort keys %addressbook)

Control structures


Perl has several kinds of control structures.

It has block-oriented control structures, similar to those in the C, Javascript
JavaScript

JavaScript is a scripting language widely used for client-side web development. It was the originating Programming language dialect of the ECMAScript standard....
, and Java
Java (programming language)

Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java ....
 programming languages. Conditions are surrounded by parentheses, and controlled blocks are surrounded by braces:

label while ( cond ) label while ( cond ) continue label for ( init-expr ; cond-expr ; incr-expr ) label foreach var ( list ) label foreach var ( list ) continue if ( cond ) if ( cond ) else if ( cond ) elsif ( cond ) else

Where only a single statement is being controlled, statement modifiers provide a more-concise syntax:

statement if cond ; statement unless cond ; statement while cond ; statement until cond ; statement foreach list ;

Short-circuit logical operators are commonly used to affect control flow at the expression level:

expr and expr expr && expr expr or expr expr || expr

(The "and" and "or" operators are similar to && and || but have lower precedence
Precedence

Precedence is a simple ordering, based on either importance or sequence; it may refer to one of the following:* Message precedence of military communications traffic...
, which makes it easier to use them to control entire statements.)

The flow control keywords next (corresponding to C's continue), last (corresponding to C's break), return, and redo are expressions, so they can be used with short-circuit operators.

Perl also has two implicit looping constructs, each of which has two forms:

results = grep list results = grep expr, list results = map list results = map expr, list

grep returns all elements of list for which the controlled block or expression evaluates to true. map evaluates the controlled block or expression for each element of list and returns a list of the resulting values. These constructs enable a simple functional programming
Functional programming

In computer science, functional programming is a programming paradigm that treats computation as the evaluation of function s and avoids program state and immutable object data....
 style.

Up until the 5.10.0 release, there was no switch statement
Switch statement

In computer programming, a switch statement is a type of control Statement that exists in most modern imperative programming languages . Its purpose is to allow the value of a variable or expression to control the flow of program execution....
 in Perl 5. From 5.10.0 onward, a multi-way branch statement called given/when is available, which takes the following form:

given ( expr )

Syntactically, this structure behaves similarly to switch statement
Switch statement

In computer programming, a switch statement is a type of control Statement that exists in most modern imperative programming languages . Its purpose is to allow the value of a variable or expression to control the flow of program execution....
s found in other languages, but with a few important differences. The largest is that unlike switch/case structures, given/when statements break execution after the first successful branch, rather than waiting for explicitly defined break commands. Conversely, explicit continues are instead necessary to emulate switch behavior.

For those not using the 5.10.0 release, the Perl documentation describes a half-dozen ways to achieve the same effect by using other control structures. There is also a module, which provides functionality modeled on the forthcoming Perl 6
Perl 6

Perl 6 is a planned major revision to the Perl programming language. It is a language specification which introduces elements of many modern and historical languages....
 re-design. It is implemented using a source filter, so its use is unofficially discouraged.

Perl includes a goto label statement, but it is rarely used. Situations where a goto is called for in other languages don't occur as often in Perl because of its breadth of flow control options.

There is also a goto &sub statement that performs a tail call
Tail call

A tail call is a call to a subroutine which is followed by a return to the calling code. Such a call is said to be in tail position. If a subroutine performs a tail call to itself, it is called tail recursion....
. It terminates the current subroutine and immediately calls the specified sub. This is used in situations where a caller can perform more-efficient stack
Call stack

In computer science, a call stack is a dynamic Stack data structure that stores information about the active subroutines of a computer program....
 management than Perl itself (typically because no change to the current stack is required), and in deep recursion, tail calling can have substantial positive impact on performance because it avoids the overhead of scope/stack management on return.

Subroutines

Subroutine
Subroutine

In computer science, a subroutine or subprogram is a portion of computer code within a larger computer program, which performs a specific task and is relatively independent of the remaining code....
s are defined with the sub keyword and are invoked simply by naming them. If the subroutine in question has not yet been declared, invocation requires either parentheses after the function name or an ampersand (&) before it. But using & without parentheses will also implicitly pass the arguments of the current subroutine to the one called, and using & with parentheses will bypass prototypes.

  1. Calling a subroutine


  1. Parentheses are required here if the subroutine is defined later in the code
foo; &foo; # (this also works, but has other consequences regarding arguments passed to the subroutine)

  1. Defining a subroutine
sub foo

foo; # Here parentheses are not required

A list of arguments may be provided after the subroutine name. Arguments may be scalars, lists, or hashes.

foo $x, @y, %z; The parameters to a subroutine do not need to be declared as to either number or type; in fact, they may vary from call to call. Any validation of parameters must be performed explicitly inside the subroutine.

Arrays are expanded to their elements; hashes are expanded to a list of key/value pairs; and the whole lot is passed into the subroutine as one flat list of scalars.

Whatever arguments are passed are available to the subroutine in the special array @_. The elements of @_ are aliased to the actual arguments; changing an element of @_ changes the corresponding argument.

Elements of @_ may be accessed by subscripting it in the usual way.

$_[0], $_[1]

However, the resulting code can be difficult to read, and the parameters have pass-by-reference
Evaluation strategy

In computer science, an evaluation strategy is a set of rules for determining the evaluation of expression in a programming language. Emphasis is typically placed on subprogram or operators ? an evaluation strategy defines when and in what order the arguments to a function are evaluated, when they are substituted into the function, and wha...
 semantics, which may be undesirable.

One common idiom is to assign @_ to a list of named variables.

my ($x, $y, $z) = @_;

This provides mnemonic parameter names and implements pass-by-value
Evaluation strategy

In computer science, an evaluation strategy is a set of rules for determining the evaluation of expression in a programming language. Emphasis is typically placed on subprogram or operators ? an evaluation strategy defines when and in what order the arguments to a function are evaluated, when they are substituted into the function, and wha...
 semantics. The my keyword indicates that the following variables are lexically scoped to the containing block.

Another idiom is to shift parameters off of @_. This is especially common when the subroutine takes only one argument or for handling the $self argument in object-oriented modules.

my $x = shift;

Subroutines may assign @_ to a hash to simulate named arguments; this is recommended in Perl Best Practices for subroutines that are likely to ever have more than three parameters.

sub function1 function1( x => 23 );

Subroutines may return values.

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

If the subroutine does not exit via a return statement, then it returns the last expression evaluated within the subroutine body. Arrays and hashes in the return value are expanded to lists of scalars, just as they are for arguments.

The returned expression is evaluated in the calling context of the subroutine; this can surprise the unwary.

sub list sub array

$x = list; # returns 6 - last element of list $x = array; # returns 3 - number of elements in list @x = list; # returns (4, 5, 6) @x = array; # returns (4, 5, 6)

A subroutine can discover its calling context with the wantarray function.

sub either

$x = either; # returns "Oranges" @x = either; # returns (1, 2)

Regular expressions

The Perl language includes a specialized syntax for writing regular expression
Regular expression

In computing, regular expressions provide a concise and flexible means for identifying strings of text of interest, such as particular characters, words, or patterns of characters....
s (RE, or regexes), and the interpreter contains an engine for matching strings to regular expressions. The regular-expression engine uses a backtracking
Backtracking

Backtracking is a general algorithm for finding all solutions to some computational problem, that incrementally builds candidates to the solutions, and abandons each partial candidate c as soon as it determines that c cannot possibly be completed to a valid solution ....
 algorithm, extending its capabilities from simple pattern matching to string capture and substitution. The regular-expression engine is derived from regex written by Henry Spencer
Henry Spencer

Henry Spencer is a Canada computer programmer and space enthusiast. He wrote 'regex', a widely-used Library for regular expressions, and co-wrote C News, a Usenet server program....
.

The Perl regular-expression syntax was originally taken from Unix Version 8 regular expressions. However, it diverged before the first release of Perl and has since grown to include far more features. Many other languages and applications are now adopting Perl compatible regular expressions over POSIX
POSIX

POSIX or "Portable Operating System Interface" is the collective name of a family of related standardizations specified by the Institute of Electrical and Electronics Engineers to define the application programming interface , along with shell and utilities interfaces for software compatible with variants of the Unix operating system, altho...
 regular expressions, such as PHP
PHP

PHP is a scripting language originally designed for producing dynamic web pages. It has evolved to include a command line interface capability and can be used in Standalone software Graphical user interface....
, Ruby, Java
Java (programming language)

Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java ....
, Microsoft's .NET Framework
.NET Framework

The Microsoft .NET Framework is a software framework that is available with several Microsoft Windows operating systems. It includes a large Library of coded solutions to prevent common programming problems and a virtual machine that manages the execution of programs written specifically for the Software framework....
, and the Apache HTTP server
Apache HTTP Server

The Apache HTTP Server, commonly referred to simply as Apache , is a web server notable for playing a key role in the initial growth of the World Wide Web....
.

Regular-expression syntax is extremely compact, owing to history. The first regular-expression dialects were only slightly more expressive than globs, and the syntax was designed so that an expression would resemble the text that it matches. This meant using no more than a single punctuation character or a pair of delimiting characters to express the few supported assertions. Over time, the expressiveness of regular expressions grew tremendously, but the syntax design was never revised and continues to rely on punctuation. As a result, regular expressions can be cryptic and extremely dense.

Uses
The m// (match) operator introduces a regular-expression match. (If it is delimited by slashes, as in all of the examples here, then the leading m may be omitted for brevity. If the m is present, as in all of the following examples, other delimiters can be used in place of slashes.) In the simplest case, an expression such as

$x =~ /abc/;

evaluates to true if and only if
If and only if

If and only if, in logic and fields that rely on it such as mathematics and philosophy, is a biconditional logical connective between statements....
 the string $x matches the regular expression abc.

The s/// (substitute) operator, on the other hand, specifies a search-and-replace operation:

$x =~ s/abc/aBc/; # upcase the b

Another use of regular expressions is to specify delimiters for the split function:

@words = split /,/, $line;

The split function creates a list of the parts of the string that are separated by matches of the regular expression. In this example, a line is divided into a list of its comma-separated parts, and this list is then assigned to the @words array.

Syntax

Modifiers
Perl regular expressions can take modifiers. These are single-letter suffixes that modify the meaning of the expression:

$x =~ /abc/i; # case-insensitive pattern match $x =~ s/abc/aBc/g; # global search and replace

Because the compact syntax of regular expressions can make them dense and cryptic, the /x modifier was added in Perl to help programmers write more-legible regular expressions. It allows programmers to place whitespace and comments inside regular expressions:

$x =~ / a # match 'a' . # followed by any character c # then followed by the 'c'character /x;

Capturing
Portions of a regular expression may be enclosed in parentheses; corresponding portions of a matching string are captured. Captured strings are assigned to the sequential built-in variables $1, $2, $3, ..., and a list of captured strings is returned as the value of the match.

$x =~ /a(.)c/; # capture the character between 'a' and 'c'

Captured strings $1, $2, $3, ... can be used later in the code.

Perl regular expressions also allow built-in or user-defined functions apply to the captured match, by using the /e modifier:

$x = "Oranges"; $x =~ s/(ge)/uc($1)/e; # OranGEs $x .= $1; # append $x with the contents of the match in the previous statement: OranGEsge

Database interfaces

Perl is widely favored for database applications. Its text-handling facilities are useful for generating SQL
SQL

SQL is a database computer language designed for the retrieval and management of data in relational database management systems , database schema creation and modification, and database object access control management....
 queries; arrays, hashes, and automatic memory management make it easy to collect and process the returned data.

In early versions of Perl, database interfaces were created by relinking the interpreter with a client-side database library. This was sufficiently difficult that it was done for only a few of the most-important and most widely used databases, and it restricted the resulting perl executable to using just one database interface at a time.

In Perl 5, database interfaces are implemented by Perl DBI
Perl DBI

Perl DBI is the most common database interface for the Perl programming language.DBI was specified by Tim Bunce, in collaboration with others, starting in 1992, and is currently maintained across the Internet as a CPAN module in accordance with the Open Source model....
 modules. The DBI (Database Interface) module presents a single, database-independent interface to Perl applications, while the DBD (Database Driver) modules handle the details of accessing some 50 different databases; there are DBD drivers for most ANSI
American National Standards Institute

The American National Standards Institute or ANSI is a private non-profit organization that oversees the development of voluntary consensus standards for products, services, processes, systems, and personnel in the United States....
 SQL
SQL

SQL is a database computer language designed for the retrieval and management of data in relational database management systems , database schema creation and modification, and database object access control management....
 databases.

DBI provides caching for database handles and queries, which can greatly improve performance in long-lived execution environments such as mod_perl
Mod perl

mod_perl is an optional module for the Apache HTTP server. It embeds a Perl Interpreter into the Apache server, so that dynamic content produced by Perl Scripting language can be served in response to incoming requests, without the significant overhead of re-launching the Perl interpreter for each request....
, helping high-volume systems avert load spikes as in the Slashdot effect
Slashdot effect

The Slashdot effect, also known as slashdotting, is the phenomenon of a popular website linking to a smaller site, causing the smaller site to slow down or even temporarily close due to the increased traffic....
.

Comparative performance

The Computer Language Benchmarks Game compares the performance of implementations of typical programming problems in several programming languages. The submitted Perl implementations were typically toward the high end of the memory-usage spectrum and had varied speed results. Perl's performance in the benchmarks game is typical for interpreted languages and places it toward the lead in that group.

Large Perl programs start slower than similar programs in compiled languages because perl has to compile the source every time it runs. In a talk at the YAPCEurope 2005 conference and subsequent article "A Timely Start," Jean-Louis Leroy found that his Perl programs took much longer to run than he expected because the perl interpreter spent much of the time finding modules because of his over-large include path. Unlike Java, Python, and Ruby, Perl has only experimental support for pre-compiling. Therefore Perl programs pay this overhead penalty on every execution. The run phase of typical programs is long enough that amortized startup time is not substantial, but results in benchmarks that measure very short execution times are likely to be skewed.

A number of tools have been introduced to improve this situation. The first such tool was Apache's mod_perl
Mod perl

mod_perl is an optional module for the Apache HTTP server. It embeds a Perl Interpreter into the Apache server, so that dynamic content produced by Perl Scripting language can be served in response to incoming requests, without the significant overhead of re-launching the Perl interpreter for each request....
, which sought to address one of the most-common reasons that small Perl programs were invoked rapidly: CGI
Common Gateway Interface

The Common Gateway Interface is a Standardization Protocol for interfacing external application software with an Server , commonly a web server....
 Web
World Wide Web

The World Wide Web is a very large set of interlinked hypertext documents accessed via the Internet. With a Web browser, one can view Web pages that may contain writing, s, videos, and other multimedia and navigate between them using hyperlinks....
 development. ActivePerl
ActiveState

ActiveState is a Canadian proprietary software company headquartered in Vancouver, British Columbia that develops, sells, and supports cross-platform software development tools for dynamic programming language such as Perl, PHP, Python , Ruby , and Tcl, as well as Software distribution and enterprise services....
, via Microsoft ISAPI
ISAPI

The Internet Server Application Programming Interface is an N-tier Application programming interface of Internet Information Services , Microsoft's collection of Microsoft Windows-based web server services....
, provides similar performance improvements.

Once Perl code is compiled, there is additional overhead during the execution phase that typically isn't present for programs written in compiled languages such as C or C++. Examples of such overhead include bytecode interpretation, reference-counting memory management, and dynamic type checking.

Optimizing

Like any code, Perl programs can be tuned for performance
Optimization (computer science)

In computing, optimization is the process of modifying a system to make some aspect of it work more efficiently or use fewer resources. For instance, a computer program may be optimized so that it executes more rapidly, or is capable of operating with less Computer data storage or other resources, or draw less power....
 using benchmarks
Benchmark (computing)

In computing, a benchmark is the act of running a computer program, a set of programs, or other operations, in order to assess the relative performance of an object, normally by running a number of standard tests and trials against it....
 and profiles
Performance analysis

In software engineering, performance analysis, more commonly today known as profiling, is the investigation of a program's behavior using information gathered as the program executes ....
 after a readable and correct implementation is finished. In part because of Perl's interpreted nature, writing more-efficient Perl will not always be enough to meet one's performance goals for a program.

In such situations, the most-critical routines of a Perl program can be written in other languages such as C
C (programming language)

C is a general-purpose computer programming language originally developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories to implement the Unix operating system....
 or Assembler
Assembly language

An assembly language is a low-level language for programming computers. It implements a symbolic representation of the numeric machine codes and other constants needed to program a particular CPU architecture....
, which can be connected to Perl via simple Inline modules or the more-complex-but-flexible XS
XS (Perl)

XS is an interface through which a Perl program can call a C or C++ language subroutine. The letters stand for eXternal Subroutine, or xsub, where external means external to Perl, i.e....
 mechanism. Nicholas Clark, a Perl core developer, discusses some Perl design trade-offs and some solutions in When perl is not quite fast enough.

In extreme cases, optimizing Perl can require intimate knowledge of the interpreter's workings rather than skill with algorithms, the Perl language, or general principles of optimization.

Future

At the 2000 Perl Conference
O'Reilly Open Source Convention

The O'Reilly Open Source Convention is an annual Convention for the discussion of free and open source software. It is organized by the publisher O'Reilly Media and is held each summer in the United States....
, Jon Orwant made a case for a major new language initiative. 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, and more than 300 RFCs
Request for Comments

In computer network engineering, a request for comments is a memorandum published by the Internet Engineering Task Force describing methods, behaviors, research, or innovations applicable to the working of the Internet and Internet-connected systems....
 were submitted.

Larry Wall
Larry Wall

Larry Wall is a programmer and author, most widely known for his creation of the Perl programming language in 1987....
 spent the next few years digesting the RFCs and synthesizing them into a coherent framework for Perl 6. He has presented his design for Perl 6 in a series of documents called "apocalypses," which are numbered to correspond to chapters in Programming Perl
Programming Perl

Programming Perl,ISBN 0-596-00027-8,best known as the Camel Book among programmers, is a book about writing programs using the Perl programming language....
 ("The Camel Book"). The current, not-yet-finalized specification of Perl 6 is encapsulated in design documents called Synopses, which are numbered to correspond to Apocalypses.

Perl 6 is not intended to be backward compatible, although there will be a compatibility mode.

Thesis work by Bradley M. Kuhn
Bradley M. Kuhn

Bradley M. Kuhn is a free software activist from the United States. Kuhn is currently the FLOSS Community Liaison and Technology Director of Software Freedom Law Center and president of the Software Freedom Conservancy....
, overseen by Larry Wall, considered the possible use of the Java virtual machine
Java Virtual Machine

A Java Virtual Machine is a set of computer software programs and data structures which use a virtual machine model for the execution of other computer programs and Scripting language....
 as a runtime for Perl. Kuhn's thesis showed this approach to be problematic, and in 2001, it was decided that Perl 6 would run on a cross-language virtual machine
Virtual machine

In computer science, a virtual machine is a software implementation of a machine that executes programs like a real machine.Definitions...
 called Parrot
Parrot virtual machine

Parrot is a register machine virtual machine being developed using the C and intended to run dynamic languages efficiently. It uses just-in-time compilation for speed to reduce the interpretation overhead....
. This will mean that other languages targeting the Parrot will gain native access to CPAN
CPAN

CPAN, the Comprehensive Perl Archive Network, is an archive of over 14,800 modules of software written in Perl, as well as documentation for it....
, allowing some level of cross-language development.

In 2005, Audrey Tang
Audrey Tang

Audrey Tang is a Taiwanese people free software programmer, who has been described as one of the "ten greats of Taiwanese computing."...
 created the pugs
Pugs

Pugs is a compiler and interpreter for the Perl 6 programming language, started on February 1 2005 by Audrey Tang....
 project, an implementation of Perl 6 in Haskell
Haskell (programming language)

Haskell is a standardized, purely functional programming language with non-strict programming language, named after logician Haskell Curry. The goals of the language are described as:...
. This was, 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
Freenode

freenode, formerly known as Open Projects Network, is a popular Internet Relay Chat computer network used to discuss peer-directed projects....
 #perl6 irc channel.

A number of features in the Perl 6 language now show similarities to Haskell, and Perl 6 has been embraced by the Haskell community as a potential scripting language.

, Perl 6, Parrot, and pugs are under active development, and a new module for Perl 5 called v6
V6 (Perl)

v6 is a Perl module which runs under Perl version 5, and transforms Perl 6 code into Perl 5 code on the fly. To quote the release notes:...
 allows some Perl 6 code to run directly on top of Perl 5.

Development of Perl 5 is also continuing. Perl 5.10 was released in December 2007, with some new features influenced by the design of Perl 6.

The Perl community

Perl's culture and community has developed alongside the language itself. Usenet
Usenet

Usenet, a portmanteau of "user" and "network", is a worldwide distributed Internet discussion system. It evolved from the general purpose UUCP architecture of the same name....
 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 Larry Wall's first "State of the Onion" talk.

State of the Onion

State of the Onion is the name for Larry Wall’s yearly keynote
Keynote

A keynote in literature, music or public speaking is the principal underlying theme. In corporate or commercial settings, greater importance is attached to the delivery of a keynote speech or keynote address....
-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.

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

Pastimes

Perl's pastimes have become a defining element of the community. Included among them are trivial and complex uses of the language.

JAPHs
In email, Usenet, and message-board postings, "Just another Perl hacker
Just another Perl hacker

Just another Perl hacker, or JAPH, typically refers to a Perl program which prints "Just another Perl hacker," . Short JAPH programs are often used as signature block in online Internet forum, or as T-shirt designs....
" (JAPH) programs have become a common trend, originated by Randal L. Schwartz
Randal L. Schwartz

Randal L. Schwartz is an United States author, system administrator and programming consultant. Schwartz is the co-author of several widely used books about Perl, a programming language, and has written regular columns about Perl for several computer magazines....
, one of the earliest professional Perl trainers.

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
Just another Perl hacker

Just another Perl hacker, or JAPH, typically refers to a Perl program which prints "Just another Perl hacker," . Short JAPH programs are often used as signature block in online Internet forum, or as T-shirt designs....
,". 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 includes the comma at the end, although this is often omitted.

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 as how golf
Golf

Golf is a sport in which players using many types of Golf club including wood , iron , and putter , attempt to hit golf ball into each hole on a golf course in the lowest possible number of strokes....
 players seek to take as few shots as possible in a round. This use of the word "golf" originally focused on the JAPHs used in signatures in Usenet postings and elsewhere, although the same stunts had been an unnamed pastime in the language APL in previous decades. The use of Perl to write a program that performed RSA
RSA

In cryptography, RSA is an algorithm for public-key cryptography. It is the first algorithm known to be suitable for digital signature as well as encryption, and one of the first great advances in public key cryptography....
 encryption prompted a widespread and practical interest in this pastime. In subsequent years, the term "code golf" has been applied to the pastime in other languages.

Obfuscation
As with C, obfuscated code
Obfuscated code

Obfuscated code is source code in a computer programming language that has been made difficult to understand. Programmers may deliberately obfuscate code to conceal its purpose, to deter reverse engineering, or as a puzzle or recreational challenge for readers....
 competitions are a well-known pastime. The annual Obfuscated Perl contest
Obfuscated Perl contest

The Obfuscated Perl Contest was a competition for programmers of Perl which was held annually between 1996 and 2000. It was run by The Perl Journal and took its name from The International Obfuscated C Code Contest....
 made an arch virtue of Perl's syntactic flexibility.

Poetry
Similar to obfuscated code and golf, but with a different purpose, Perl poetry is the practice of writing poems that can actually be compiled as legal (although generally non-sensical) Perl code. This hobby is more or less unique to Perl because of the large number of regular English words that are used in the language. New poems are regularly published in the Perl Monks
Perl Monks

PerlMonks is a community website covering all aspects of Perl programming and other related topics such as web applications and system administration....
 site's Perl Poetry section.

CPAN Acme
There are also many examples of code written purely for entertainment on the CPAN
CPAN

CPAN, the Comprehensive Perl Archive Network, is an archive of over 14,800 modules of software written in Perl, as well as documentation for it....
. LinguaRomanaPerligata, for example, allows writing programs in Latin
Latin

Latin is an Italic language, historically spoken in Latium and Ancient Rome. Through the Military history of the Roman Empire, Latin spread throughout the Mediterranean and a large part of Europe....
. 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
Acme Corporation

The Acme Corporation is a fictional corporation that exists in several cartoons, films and TV series, most significantly in the Looney Tunes universe, where it appeared most prominently in the Wile E....
" 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 AcmeBleach, one of the first modules in the Acme namespace, which allows the program's source code to be "whitened" (i.e., all characters replaced with whitespace) and yet still work.

Further reading

  • Learning Perl
    Learning Perl

    Learning Perl, also known as the llama book, is a tutorial book for the Perl programming language, and is published by O'Reilly Media....
    , Fifth Edition (the Llama book), ISBN 0-596-52010-6
  • Perl Cookbook
    Perl Cookbook

    The Perl Cookbook, ISBN 0-596-00313-7, is a book containing solutions to common short tasks in Perl. Each chapter covers a particular topic area and is divided into around a dozen recipes each on a particular problem ....
    , ISBN 0-596-00313-7
  • Programming Perl
    Programming Perl

    Programming Perl,ISBN 0-596-00027-8,best known as the Camel Book among programmers, is a book about writing programs using the Perl programming language....
     (the Camel book), ISBN 0-596-00027-8
  • published 1996-2006 was the leading publication for and about Perl Programming during this time.


See also



  • Autovivification
    Autovivification

    Autovivification is a unique feature of the Perl programming language involving the dynamic creation of data structures. Autovivification is the automatic creation of a reference when an undefined value is dereferenced....
  • Comparison of programming languages
    Comparison of programming languages

    Programming languages are used for controlling the behavior of a machine . Like natural languages, programming languages conform to rules for syntax and semantics....
  • Just another Perl hacker
    Just another Perl hacker

    Just another Perl hacker, or JAPH, typically refers to a Perl program which prints "Just another Perl hacker," . Short JAPH programs are often used as signature block in online Internet forum, or as T-shirt designs....
  • Perl Data Language
    Perl Data Language

    PDL is a set of array programming extensions to the Perl.PDL is an extension to Perl v5, intended for scientific and other data intensive programming tasks....
  • Perl Object Environment
    Perl Object Environment

    The Perl Object Environment or POE is a Library of Perl modules written in the Perl programming language by Rocco Caputo et alia.From CPAN:...
  • PerlScript
    PerlScript

    PerlScript was initially solely an ActiveX Scripting Engine produced by the company ActiveState for use with Microsoft Internet Information Services that allows for programmers to use Perl-based code in addition to, or in place of, VBScript or JScript in the context of web servers running the Active Server Pages protocol....
  • Plain Old Documentation
    Plain Old Documentation

    Plain Old Documentation, abbreviated pod, is a simplemarkup language used to document the Perl programming language....


External links

  • —Official Perl website