What is Perl
Perl is high-level, general-purpose, interpreted, dynamic programming language. "Perl" usually refers to Perl 5. Perl is a stable, cross platform programming language available on many platforms including Unix, Windows, macOS, Linux, and many other operating systems. Even your home router may be running Perl.
Koha is built entirely using Perl and related technologies.
Official site: Perl.org
Perl has a sister language, originally known as "Perl 6", which was a redesign of Perl 5. However, it has since been renamed to "Raku" to distinguish it as a separate language. See raku.org for more information about Raku.
Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions. Perl 6, which began as a redesign of Perl 5 in 2000, eventually evolved into a separate language. Both languages continue to be developed independently by different development teams and liberally borrow ideas from one another.
The Perl languages borrow features from other programming languages including C, shell script (sh), AWK, and sed. They provide powerful text processing facilities without the arbitrary data-length limits of many contemporary Unix commandline tools, facilitating easy manipulation of text files. Perl 5, released in the late 1990s, became popular as a CGI scripting language due to its powerful parsing abilities. However, its use extends far beyond CGI. Today, Perl 5 is employed in a variety of applications including graphics programming, system administration, network programming, finance, bioinformatics, and more. Its flexibility and power have earned it the nickname "the Swiss Army chainsaw of scripting languages". It is nicknamed "the Swiss Army chainsaw of scripting languages" because of its flexibility and power, and possibly also because of its "ugliness". In 1998, it was also referred to as the "duct tape that holds the Internet together", in reference to both its ubiquitous use as a glue language and its perceived inelegance.
In 1998, a perl.com article suggested the acronym "Practical Extraction and Reporting Language" as a backronym for Perl. This acronym, though recursive, was fitting in light of Perl's (then) primarily usage for CGI scripting. The backronym is often expanded to "Practical Extraction and Report Language", but this is a later invention that did not exist at the time of Perl's creation.
Larry Wall, the creator of Perl, initially considered naming the language "Pearl" for its positive connotations. However, upon discovering an existing programming language named PEARL, he decided to change the spelling to "Perl" before its official release. It's important to note that "Perl" should be used when referring to the language, and "perl" when referring to the perl binary. The sister language of Perl, initially known as Perl 6, was renamed to "Raku" in October 2019. But you should NEVER use "Pearl", nor "PERL" or "perl" to refer to the language. It's "Perl". And it's "perl" when you speaking only about perl binary.
Perl 5 was a major change from Perl 4. It was based on a "virtual machine" that could execute arbitrary bytecode, as opposed to Perl 4's interpreter which was based on the Unix tools philosophy of "do one thing and do it well". The changes included "lexical variables", "references", and "modules" (libraries of reusable code and associated functionality). Perl 5 was also a nearly complete rewrite of the interpreter, and it added many new features to the language, including objects, references, lexical (my) variables, and modules.
Perl 5.000 was released on October 17, 1994. It was a near-complete rewrite of the interpreter, introducing objects, references, lexical (my) variables, and modules. It also added the Perl standard library (known as modules), and the CPAN archive of reusable Perl modules.
Perl 5.000 had no official name, but was informally known as "Perl 5". The name "Perl 5" was later adopted when the language was distributed as a core component of Unix and Windows operating systems.
Perl 5.001 was released on March 13, 1995. It introduced two new hooks: $SIG{WARN} and $SIG{DIE}, added support for closures, and started counting imported routines as "defined" for redef warnings.
Perl 5.002 was released on February 29, 1996. It introduced a new feature: Prototypes, and brought extensive upgrades to nearly all of Perl's modules. There were also massive changes to both the configure and build systems.
Perl 5.003 was released on June 25, 1996. It brought security fixes and bug fixes.
Perl 5.004 was released on May 15, 1997. This version was not binary compatible with previous releases. The source code was now in ANSI C. New supported platforms included BeOS, DOS, MPE/ix. EXPR foreach EXPR syntax was supported. There were also several experimental features introduced.
Perl 5.005 was released on July 22, 1998. This version was not binary compatible with previous releases. The source code was now in ANSI C. New supported platforms included BeOS, DOS, MPE/ix. EXPR foreach EXPR syntax was supported. There were also several experimental features introduced.
Perl 5.6.0 was released on March 22, 2000. The version numbering changed to 'revision.version.subversion' format. The internal representation for strings changed to UTF-8, with EBCDIC support discontinued. It introduced better support for interpreter concurrency and string literals can be written using character ordinals. It also introduced new syntax for subroutine attributes.
Perl 5.8.0 was released on July 18, 2002. It introduced support for Unicode 3.2.0, regular expressions now work with Unicode, and support for non-Latin encodings via Encode module. It also introduced interpreter threads, a new PerlIO implementation, and scalars can be used as file handles. It also finalized 64-bit support and introduced new modules.
Perl 5.8.1 was released on September 18, 2002.
Perl 5.8.4 was released on July 27, 2004.
Perl 5.8.5 was released on October 31, 2005.
Perl 5.8.6 was released on March 29, 2005.
Perl 5.8.7 was released on October 10, 2005.
Perl 5.8.8 was released on January 23, 2006.
Perl 5.8.9 was released on February 14, 2009.
Perl 5.10.0 was released on December 18, 2007. It introduced support for Unicode 5.0, a new feature pragma, a new defined-or operator (//), a new switch feature and related smart match operator (~~), numerous new regular expression features, a new say built-in (via feature say), and the ability to declare static variables with state.
Perl 5.12.0 was released on April 12, 2010. It introduced support for Unicode 5.2, a new package NAME VERSION syntax, and the ... operator. It also brought implicit strictures with the use of 5.12.0 (or later version) and ensured year 2038 compliance.
Perl 5.14.0 was released on May 14, 2011. It introduced support for Unicode 6.0 and applied Unicode semantics to all strings. It also brought non-destructive substitution (s///r), added /d, /l, /u and /a regular expression modifiers, and introduced re-entrant regular expressions. This version also featured an experimental feature of automatic dereference (autoderef) by built-ins, which was later removed in v5.24.
Perl 5.16.0 was released on May 20, 2012. It introduced the SUB for the currently-executing subroutine, encoding-disambiguated eval, and the fc case-folding function.
Perl 5.18.0 was released on May 18, 2013. It introduced regular expression character set operations and lexical subroutines, both as experimental features.
Perl 5.20.0 was released on May 27, 2014. It introduced subroutine signatures and postfix dereferencing, both as experimental features, and added key/value slice syntax.
Perl 5.22.0 was released on June 1, 2015. It introduced support for Unicode 7.0 and the double diamond operator. It also brought disambiguated bitwise operators and variable aliasing, both as experimental features. The historical modules CGI.pm and Module::Build were removed from the core distribution. The subroutine attribute and signature order was flipped, but this was flipped back in v5.28.
Perl 5.24.0 was released on May 8, 2016. It introduced support for Unicode 8.0, a new line break boundary in regular expressions, and extended Bracketed Character Classes that work in UTF-8 locales. It also brought more explicit definitions for integer shifting, reordered precision arguments for printf and sprintf, and provided more fields to the sigaction callback. The experimental autoderef feature was removed in this version.
Perl 5.26.0 was released on May 30, 2017. For security reasons, it no longer includes the current directory (".") by default at the end of the module search path (@INC). This version also finalized lexical subroutines, introduced indented Here-documents, new regular expression modifiers and capture groups. It also brought support for Unicode 9.0 and enabled Perl to do default collation in UTF-8 locales on platforms that support it.
Perl 5.28.0 was released on June 22, 2018. It introduced support for Unicode 10.0, delete on key/value hash slices, and experimental alphabetic synonyms for some regular expression assertions. It also made mixed Unicode scripts detectable, made in-place editing with perl -i safer, and allowed initialization of aggregate state variables. This version also brought full-size inode numbers, made the sprintf %j format size modifier available with pre-C99 compilers, and set the close-on-exec flag atomically. String- and number-specific bitwise ops are no longer experimental, and locales are now thread-safe on systems that support them. It also introduced a new read-only predefined variable ${^SAFE_LOCALES}, and brought security fixes. The subroutine attribute and signature order was flipped back to the original order from v5.20.
Perl 5.30.0 was released on May 22, 2019. It introduced support for Unicode 12.1. The legacy 8-bit Perl locale encoding discipline and the :locale PerlIO layer were removed. The use locale pragma no longer affects regular expression case-insensitive matching /i, regular expression bracketed character classes [...], lc, lcfirst, uc, ucfirst, quotemeta, or \l, \L, \U, \Q, \E. It also no longer affects \w, \W, \s, \S, \b, \B, \p{...}, \P{...}, \X regular expression patterns, or split. The use locale pragma no longer affects the range operator ..
Perl 5.32.0 was released on June 20, 2020. It introduced support for Unicode 13.0 and made the isa operator available as an experimental feature. The built-in functions chdir, chmod, chown, chroot, exec, link, mkdir, rename, rmdir, symlink, system, and unlink now use the passed filenames' string representation.
Perl 5.34.0 was released on May 20, 2021. This version introduced a number of new features and improvements, including the use of the Unicode 13.1 standard, experimental support for try-catch syntax, and the removal of several deprecated features
Perl 5.36.0 was released on May 20, 2022. This version came with several enhancements and new features, including the adoption of Unicode 14.0, the introduction of a new syntax for declaring variables, and the removal of several deprecated features. It also included numerous bug fixes and performance improvements. Notably, the 'isa' operator was no longer considered experimental, regex sets were no longer considered experimental, and variable length lookbehind in regexes was no longer considered experimental. It also introduced new built-in functions, subroutine signatures were no longer considered experimental, and added 'defer' blocks. It also introduced experimental try/catch with finally blocks and experimental n-at-a-time for iterators.
Perl 5.38.0 was released on July 3, 2023. This version introduced a new experimental syntax for defining object classes, support for Unicode 15.0, and a new API for operating on optree fragments. It also included enhancements to @INC hooks and introduced the ${^LAST_SUCCESSFUL_PATTERN} regexp variable. However, it deprecated the use of ' as a package name separator and the 'switch' feature and the smartmatch operator, ~~. This version also saw performance enhancements with additional optree optimizations for common OP patterns and the creation of an anonymous sub no longer generating an srefgen op. It also introduced new class feature, deprecation warnings now have specific subcategories, ability to set a consistent random seed, defined-or and logical-or assignment default expressions in subroutine signatures, and regex quantifiers limit increased to I32_MAX.