Warning: mkdir() [
function.mkdir]: Permission denied in
/home/webs/affiliatelib2/CacheManager.php on line
12
Warning: mkdir() [
function.mkdir]: No such file or directory in
/home/webs/affiliatelib2/CacheManager.php on line
12
Warning: fopen(/home/templatecore2cache//*cluesnet.com/05/05c9a7f0200d375a0538510faf39bcf3c8b85f2f.tc2cache) [
function.fopen]: failed to open stream: No such file or directory in
/home/webs/affiliatelib2/CacheManager.php on line
130
Warning: fwrite(): supplied argument is not a valid stream resource in
/home/webs/affiliatelib2/CacheManager.php on line
131
Warning: fclose(): supplied argument is not a valid stream resource in
/home/webs/affiliatelib2/CacheManager.php on line
132
{{ Infobox programming language| name = Perl| logo = | paradigm =
Multi-paradigm| latest_release_version = 5.8.8| latest_release_date = [January 31 2006, [BASIC, BASIC-PLUS, C (programming language), C++, Lisp programming language,
Pascal (programming language), Python (programming language), sed, Unix shell, [PHP, Ruby (programming language),
ECMAScript, Dao (programming language)| operating_system = Cross-platform, [Artistic License created by [Larry Wall and first released in 1987. Perl borrows features from a variety of other languages including
C (programming language), Unix shell scripting (Bourne shell),
AWK (programming language), sed and Lisp (programming language).
Structurally, Perl is based on the brace-delimited block style of AWK and C, and was widely adopted for its strengths in string processing and lack of the arbitrary limitations of many
scripting languages at the time.
History
Larry Wall began work on Perl in 1987, while working as a programmer at
Unisys, and released version 1.0 to the comp.sources.misc newsgroup on
December 18 1987. The language expanded rapidly over the next few years. Perl 2, released in 1988, featured a better regular expression engine. Perl 3, released in 1989, added support for
binary data streams.
Until 1991, the only documentation for Perl was a single (increasingly lengthy)
Manual page (Unix). In 1991,
Programming perl (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, Larry Wall abandoned Perl 4 to begin work on Perl 5.
Initial design of Perl 5 continued into 1994.
The perl5-porters mailing 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.http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
Perl 5 was released on
October 17 1994. It was a nearly complete rewrite of the interpreter (computing), and added many new features to the language, including objects, references, Local variable, 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.
As of 2007, Perl 5 is still being actively maintained. Important features and some essential new language constructs have been added along the way, including Unicode support, Thread (computer science), improved support for object oriented programming and many other enhancements. The latest stable release is Perl 5.8.8.
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 for Perl Module (programming) and Perl itself. At the time of writing, it carries over 11,000 modules by over 5,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 from the
Gospel of Matthew. 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.
The name is normally capitalized (
Perl) when referring to the language and uncapitalized (
perl) when referring to the interpreter program itself since 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, however, capitalised the language's name in the book to make it stand out better when typeset. The case distinction was subsequently adopted by the community.
The name is occasionally given as "PERL" (for
Practical
Extraction and
Report
Language). Although the expansion has prevailed in many of today's manuals, including the official Perl Manual page (Unix), it is merely a
backronym. The name does not officially stand for anything, so spelling it in all caps is incorrect and is considered a shibboleth (label of outsiders) in the Perl community. Several other expansions have been suggested, 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, published by O'Reilly Media, features a picture of a camel on the cover, and is commonly referred to as
The Camel Book. This image of a camel has become a general symbol of Perl.
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".http://perl.oreilly.com/usage/O'Reilly allows non-commercial use of the symbol, and provides
Programming Republic of Perl logos and
Powered by Perl buttons.http://www.oreillynet.com/themes/main/images/perl/
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, network programming,
GUI development, and more.
The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal).perlintro(1)
man page Its major features include support for multiple programming paradigms (procedural programming language, Object-oriented programming, and
functional programming styles), automatic
memory management, built-in support for text processing, and a large collection of third-party Module (programming).
Features
The overall structure of Perl derives broadly from C. Perl is procedural in nature, with
variables,
expression (programming)s,
assignment statements, bracket-delimited
code blocks, control structures, and
subroutines.
Perl also takes features from shell programming. All variables are marked with leading
sigil (computer programming)s, which unambiguously identify the data type (scalar, array, hash, etc.) of the variable in context. Importantly, sigils allow variables to be interpolated directly into strings. Perl has many built-in functions which provide tools often used in shell programming (though many of these tools are implemented by programs external to the shell) like sorting, and calling on system facilities.
Perl takes List (computing) from Lisp,
associative arrays (hashes) from AWK, and regular expressions from sed. These simplify and facilitate many parsing, text handling, and data management tasks.
In Perl 5, features were added that support complex data structures, first-class functions (i.e., Closure (computer science) as values), and an object-oriented programming model. These include
reference (computer science)s, packages, class-based method dispatch, and Scope (programming), 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."Usenet post, May 10th 1997, with ID 199705101952.MAA00756@wall.org.
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. 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 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 (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
Sigil (computer programming). 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 like Lisp programming language, where the same
S-expression construct and basic syntax is used for many different purposes.
Perl does not enforce any particular programming paradigm (procedural, object-oriented, functional, etc.) 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."
Perl has several mottos that convey aspects of its design and use. One is
"There's more than one way to do it." (TIMTOWTDI, usually pronounced 'Tim Toady'). Others are
"Perl: the Swiss Army Chainsaw of Programming Languages" and
"No unnecessary limits". A stated design goal of Perl is to make easy tasks easy and difficult tasks possible. Perl has also been called
"The Duct Tape of the Internet".
There is no written specification or standard for the Perl language, and no plans to create one for the current version of Perl. There has only ever been one implementation of the interpreter. 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
Common Gateway Interface scripts. It is known as one of "the three Ps" (along with Python (programming language) and
PHP), the most popular dynamic languages for writing Web applications (which now also include
Ruby (programming language)). It is also an integral component of the popular
LAMP (software bundle) solution stack for web development. Large projects written in Perl include
Slash (weblog system),
Bugzilla, TWiki and
Movable Type. Many high-traffic websites, such as
Amazon.com, LiveJournal.com,
Ticketmaster.com and Internet Movie Database use Perl extensively.
Perl is often used as a glue language, tying together systems and interfaces that were not specifically designed to interoperate, and for "data munging", i.e., converting or processing large amounts of data for tasks like creating reports. In fact, these strengths are intimately linked. The combination makes perl a popular all-purpose tool for system administrators, particularly as 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 and bespoke) to simplify packaging and maintenance of software build and deployment scripts.
Graphical user interfaces (GUI's) 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 (computing),Tcl and WxPerl.
Perl is also widely used in finance and bioinformatics, where it is valued for rapid application development and deployment, and the ability 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, as of 2005, 12 megabyte when packaged in a
Tar (file format) and data compression. 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 execution of a Perl program divides broadly into two phases: compile-time and run-time.A description of the Perl 5 interpreter can be found in
Programming Perl, 3rd Ed., chapter 18 At compile time, the interpreter parses the program text into a syntax tree. At run time, it executes the program by walking the tree. The text is parsed only once, and the syntax tree is subject to optimization before it is executed, so the execution phase is relatively efficient. Compile-time optimizations on the syntax tree include
constant folding and context propagation, but
peephole optimization is also performed. However, compile-time and run-time phases may nest: BEGIN code blocks execute at compile-time, while the eval function initiates compilation during runtime. Both operations are an implicit part of a number of others—most notably, the use clause that loads libraries, known in Perl as modules, implies a BEGIN block.
Perl has a context-sensitive grammar which can be affected by code executed during an intermittent run-time phase. Therefore Perl cannot be parsed by a straight
Lex programming tool/
Yacc lexer/parser combination. Instead, the interpreter implements its own lexer, which coordinates with a modified
GNU bison parser to resolve ambiguities in the language. It is said that "only perl can parse Perl", meaning that only the Perl interpreter (
perl) can parse the Perl language (
Perl). The truth of this is attested to by the persistent imperfections of other programs that undertake to parse Perl, such as source code analyzers and auto-indenters, which have to contend not only with the many ways to express unambiguous syntactic constructs, but also the fact that Perl cannot be parsed in the general case without executing it.
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 the interpreter pass 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, and is licensed under both the
Artistic License and the GNU General Public License.
Perl#Distributions are available for most operating systems. It is particularly prevalent on Unix and Unix-like 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 on all Unix-like, POSIX-compliant or otherwise Unix-compatible platforms. However, this is rarely necessary, as Perl is included in the default installation of many popular operating systems.
Because of unusual changes required for the Mac OS history 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.http://www.cpan.org/ports/
Windows
Users of Microsoft Windows typically install a native binary distribution of Perl, most commonly ActivePerl. Compiling Perl from
source code under Windows is possible, but most installations lack the requisite C compiler and build tools. This also makes it hard to install modules from the CPAN, particularly such modules that are partially written in C.
Users of the ActivePerl binary distribution are therefore dependent on the repackaged modules provided in ActiveState’s module repository, which are precompiled and can be installed with Perl package manager. Limited resources to maintain this repository have been cause for various long-standing problems in the past.
To address this and other problems of Perl on the Windows platform, win32.perl.org was launched by Adam Kennedy on behalf of
The Perl Foundation in June 2006. This is a community website for "all things Windows and Perl." A major aim of this project is to provide a production-quality alternative binary distribution that includes a C compiler and build tools, so as to enable Windows users to install modules directly from the CPAN. This distribution is known as Strawberry Perl.
Another way of running Perl under Windows is provided by the
Cygwin emulation layer. Cygwin provides a Unix-like environment on Windows that includes
GNU Compiler Collection, so compiling Perl from source is a more accessible option for users who take this approach.
Language structure
In Perl, the minimal Hello world program may be written as follows:print "Hello, world!\n"This
Input/outputs the String (computer science)
Hello, world! and a newline, symbolically expressed by an n character whose interpretation is altered by the preceding backslash.
The canonical form of the program is slightly more verbose:
!/usr/bin/perl
print "Hello, world!\n";
The hash mark character introduces a comment (computer programming) 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 (Unix) 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 systems, Perl programs are typically invoked by associating the .pl Filename extension with the Perl interpreter. In order to deal with such circumstances, perl detects the shebang line and parses it for switches, so 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.
Data types
Perl has a number of fundamental
data types, the most commonly used and discussed being:
Scalar (computing), arrays,
Hash table, filehandles and subroutines:
- A Scalar (computing) is a single value; it may be a number, a String (computer science) or a Reference (computer science)
- An array is an ordered collection of scalars
- A hash, or associative array, 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 which 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 (computer programming), 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 hashFOO # a file handle or constant&foo # a subroutine. (The & is optional)
File handles and constants need not be uppercase, but it is a common convention owing to the fact that there is no sigil to denote them. Since 5.8 a scalar may be used as a file handle, and using this feature is encouraged in Damian Conway's
Perl Best Practices.
Numbers are written in the bare form; strings are enclosed by quotes of various kinds.
$name = "joe";$color = 'red';
$number1 = 42;$number2 = "42";
This evaluates to true
if ($number1 == $number2) { print "Numbers and strings of numbers are the same!"; }
$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 = '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 # an element of @scores$favorite{joe} # a value in %favorite
Thus, a hash can also be specified by setting its keys individually:
$favorite{joe} = 'red';$favorite{sam} = 'blue';
Multiple elements may be accessed by using the @ sigil instead (identifying the result as a list).
@scores 3, 1 # three elements of @scores@favorite{'joe', 'sam'} # two values in %favorite@favorite{qw(joe sam)} # 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.
$count = @friends; # Assigning to a scalar forces scalar context
This notation is sometimes discouraged, because it tends
to be confused with comments.
$#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;
Every call to each return the next key/value pair.
All values will be eventually returned, but their order
cannot be predicted.
while (($name, $address) = each %addressbook) { print "$name lives at $address\n";
}
Similar to the above, but sorted alphabetically
foreach my $next_name (sort keys %addressbook) { print "$next_name lives at $addressbook{$next_name}\n";
}
Control structures
Perl has several kinds of control structures.
It has block-oriented control structures, similar to those in the C,
Javascript, and Java (programming language) 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, 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 style.
There is no switch statement (multi-way branch) in Perl 5. The Perl documentation describes a half-dozen ways to achieve the same effect by using other control structures. There is a Switch module, however, which provides functionality modeled on the forthcoming Perl 6 re-design; it may become a part of the core language in the 5.10 release perldelta - what is new for perl v5.9.3, Rafaël Garcia-Suarez..
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 due to its breadth of flow control options.
There is also a goto &sub statement that performs a
tail call. It terminates the current subroutine and immediately calls the specified
sub. This is used in situations where a caller can perform more efficient
Call stack 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
Subroutines are defined with the sub keyword, and 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.
Calling a subroutine
Parentheses are required here if the subroutine is defined later in the code
foo();&foo; # (this also works)
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.
$_, $_
However, the resulting code can be difficult to read, and the parameters have
Evaluation strategy#Call by reference 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
Evaluation strategy#Call by value 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 ever to have more than three parameters.Damian Conway,
Perl Best Practices, , p.182
sub function1 { my %args = @_;
print "'x' argument was '$args{x}'\n";
}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 { (4, 5, 6) }sub array { @x = (4, 5, 6); @x }
$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 { return wantarray
? (1, 2)
: "Oranges";
}
$x = either; # returns "Oranges"@x = either; # returns (1, 2)
Regular expressions
The Perl language includes a specialized syntax for writing regular expressions (RE, or regexes), and the interpreter contains an engine for matching strings to regular expressions. The regular expression engine uses a backtracking 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.
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 many more features. Other languages and applications are now adopting
PCRE over
POSIX regular expressions including
PHP,
Ruby programming language,
Java (programming language), Microsoft's .NET FrameworkMicrosoft Corp., ".NET Framework Regular Expressions",
.NET Framework Developer's Guide, , and the
Apache HTTP server.
Regular expression syntax is extremely compact, owing to history. The first regular expression dialects were only slightly more expressive than
Glob (programming), and the syntax was designed so that an expression would resemble the text 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 you use slashes as delimiters, as in all the examples here, then the leading m may be omitted for brevity.) In the simplest case, an expression like
$x =~ m/abc/
evaluates to true if and only if 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 m/,/, $line;
The split function creates a list of the parts of the string 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
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 =~ m/a(.)c/; # capture the character between 'a' and 'c'
Perl regular expressions can take
modifiers. These are single-letter suffixes that modify the meaning of the expression:
$x =~ m/abc/i; # case-insensitive pattern match$x =~ s/abc/aBc/g; # global search and replace
Since regular expressions can be dense and cryptic because of their compact syntax, 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 =~ m/a # match 'a' . # followed by any character
c # then followed by the 'c'character
/x;
Database interfaces
Perl is widely favored for database applications. Its text handling facilities are useful for generating SQL 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 only done for a few of the most important and widely used databases, and restricted the resulting perl executable to using just one database interface at a time.
In Perl 5, database interfaces are implemented by Perl DBI 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
American National Standards Institute SQL databases.
DBI provides caching for database handles and queries, which can greatly improve performance in long-lived execution environments such as mod_perl, helping high-volume systems avert load spikes as in the
Slash dot effect.
Comparative performance
The Computer Language Benchmarks Game compare the performance of implementations of typical programming problems in several programming languages.http://shootout.alioth.debian.org/ The submitted Perl implementations were typically towards the high end of the memory usage spectrum, and had varied speed results. Perl's performance in the benchmarks game is similar to other interpreted languages such as Python, faster than PHP, and significantly faster than Ruby, but slower than most compiled languages.
Perl programs can start slower than similar programs in compiled languages because perl has to compile the source every time it runs. In a talk at the
YAPC 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. Because pre-compiling is still an experimental part of Perl – unlike that of Java, Python, and Ruby – Perl programs pay this overhead penalty on every execution. When
amortized over a long run phase, startup time is not typically substantial, but measurement of very short execution times can often be skewed as is often found in benchmarks.
A number of tools have been introduced to improve this situation, the first of which was Apache's mod_perl, which sought to address one of the most common reasons that small Perl programs were invoked rapidly:
Common Gateway Interface World Wide Web development. ActiveState, via Microsoft
ISAPI 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 like C or C++, including, among many other things, overhead due to bytecode interpretation, reference-counting memory management, and dynamic type checking.
Optimizing
Perl programs, like any code, can be Optimization (computer science) using
Benchmark (computing) and Performance analysis 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 (programming language) or
Assembly language, which can be connected to Perl via simple Inline modules or the more complex but flexible
XS (Perl) mechanism.http://search.cpan.org/perldoc/Inline/ Nicholas Clark, a Perl core developer, discusses some Perl design trade-offs and some solutions in
When perl is not quite fast enough.http://www.ccl4.org/~nick/P/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,
Jon Orwant made a case for a major new language initiative. Transcription of Larry's talk. Retrieved on 2006 September 28. 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 over 300
Request for Commentss were submitted.
Larry Wall 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 ("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, though there will be a compatibility mode.
In
2001, it was decided that Perl 6 would run on a cross-language virtual machine called Parrot virtual machine. This will mean that other languages targeting the Parrot will gain native access to
CPAN, allowing some level of cross-language development.
In
2005 Audrey Tang created the
pugs project, an implementation of Perl 6 in Haskell (programming language). 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 #perl6 irc channel.
A number of features in the Perl 6 language now show similarities with Haskell, and Perl 6 has been embraced by the Haskell community as a potential scripting language.
As of 2006, Perl 6, Parrot, and pugs are under active development, and a new module for Perl 5 called v6 (Perl) allows some Perl 6 code to run directly on top of Perl 5.
In 2006, an effort was started to have Windows Perl distributions ship with a compiler, in order to make the need for binary packages on Windows redundant. Some early results of this include the CamelPack macro-installer and Vanilla Perl distributions.http://camelpack.sourceforge.net/http://win32.perl.org/wiki/index.php?title=Vanilla_Perl
Development of Perl 5 is also continuing. The development versions are number 5.9.x and the next stable version is planned to be called Perl 5.10. Some of its features are influenced by the design of Perl 6. More information about the upcoming release is available in the files perldelta59*.pod in CPAN distribution of 5.9.x development versions.http://search.cpan.org/src/RGARCIA/perl-5.9.4/pod/
The Perl community
Perl's culture and community has developed alongside the language itself. Usenet was the first public venue in which Perl was introduced, but over the course of its evolution, Perl's community was shaped by the growth of broading 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.
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" (JAPH) programs have become a common trend, originated by
Randal L. Schwartz, one of the earliest professional Perl trainers.Randal L. Schwartz in usenet message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origin of JAPH. Available through google: http://groups.google.com/group/comp.lang.perl.misc/msg/ecc405feeefc120c
In the parlance of Perl culture, Perl programmers are known as Perl hackers, and from this derives the practice of writing short programs to print out the phrase "
Just another Perl hacker,". In the spirit of the original concept, these programs are moderately obfuscated and short enough to fit into the signature of an email or Usenet message. The "canonical" JAPH includes the comma at the end, although this is often omitted.
Perl golf
Perl "golf" is the pastime of reducing the number of characters used in a Perl program to the bare minimum, much as how golf players seek to take as few shots as possible in a round. It originally focused on the JAPHs used in signatures in Usenet postings and elsewhere, but the use of Perl to write a program which performed RSA encryption prompted a widespread and practical interest in this pastime.http://www.cypherspace.org/adam/rsa/story.html In subsequent years, code golf has been taken up as a pastime in other languages besides Perl.
Obfuscation
As with C,
obfuscated code competitions are a well-known pastime. The annual Obfuscated Perl 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 due to the large number of regular English words used in the language. New poems are regularly published in the
Perl Monks site's Perl Poetry section.http://www.perlmonks.org/?node_id=1590
CPAN Acme
There are also many examples of code written purely for entertainment on the CPAN. Lingua::Romana::Perligata, for example, allows writing programs in
Latin. 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 Corporation" namespace for modules that are fun in nature (but its scope has widened to include exploratory or experimental code or any other module that is not meant to ever be used in production). Some of the Acme modules are deliberately implemented in amusing ways. This includes Acme::Bleach, one of the first modules in the Acme:: namespace, which allows the program's source code to be "whitened" (i.e., all characters replaced with whitespace) and yet still work.
These are also examples of "source filters"; libraries which transform the text of a program before reading it.
See also
References
External links
Perl tutorial: Start
Please note: This tutorial was written in the early 1990's for version 4 of Perl. Although it is now significantly out of date, it was a popular source of ...
The Perl Directory - perl.org
Run by the Perl Foundation with the aim of being "the central directory of all things Perl". Lists news, applications, documentations, communities, and events. Also hosts various ...
About Perl - perl.org
Who uses Perl? The Perl Journal estimated that there are over 1,000,000 Perl users. More than 200 local Perl user groups exist on six continents.
Perl.me.uk .: Learning Perl :.
Downloads. 23.09.04. Almost finshed (rough and not quite working yet) my first 100 line script that resizes jpegs (using Image::Magick) to the ebay size of 640x480, uploads them to ...
Aberdeen.pm.org Blog :.
Perl 6 was supposed to allow this, but they moved in a different direction. Oh well. * lexical $_ allows you to nest $_ (without using local). * _ prototype you can now declare a sub ...
Perl version 5.10.0 documentation - perldoc.perl.org
Core documentation for the current version of Perl, in HTML and PDF formats. Features include highlighting and linking of code examples, labels, and a customisable display.
perl - perldoc.perl.org
NAME; SYNOPSIS. Overview; Tutorials; Reference Manual; Internals and C Language Interface; Miscellaneous; Language-Specific; Platform-Specific. DESCRIPTION; AVAILABILITY ...
Perl.com: The Source for Perl -- perl development, conferences
News site run by O'Reilly. Contains documentation, weekly articles, Perl development summaries, blogs, and links to a variety of resources.
Perl from FOLDOC
Perl < language, tool > A high-level programming language, started by Larry Wall in 1987 and developed as an open source project. It has an eclectic heritage, deriving from the ...
Practical Perl Programming
Practical Perl Programming ... PDF VERSION of PERL NOTES AVAILABLE FOR DOWNLOAD (Local Students ONLY) PDF PERL NOTES (Local Students ONLY)