From 549438be7cb6a7511c695eccbc4cefc53c18c10a Mon Sep 17 00:00:00 2001 From: tocariimaa Date: Tue, 4 Mar 2025 00:38:06 -0300 Subject: [PATCH] articles/perl.md: new article --- articles/perl.md | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 articles/perl.md diff --git a/articles/perl.md b/articles/perl.md new file mode 100644 index 0000000..6fcc119 --- /dev/null +++ b/articles/perl.md @@ -0,0 +1,68 @@ +# Perl +Perl is a scripting [programming language](programming_language.md) created by Larry Wall in 1987. Originally meant +for text processing (as a replacement for [AWK](awk.md)) it latter became a general purpose language. It is quite +[bloated](bloat.md) and has only a single relevant implementation (written in C). Also it is known for its syntax, +which can be considered as "inelegant" and leading to "write-only" programs, also the extensive use of sigils; +marks used before identifiers used as a way of communicating the data type of the underlying identifiers; using +the wrong sigil can lead to unexpected type conversion. + +Perl includes powerful [regex](regular_expressions.md) capabilities, although its regex engine is susceptible to catastrophic +backtracking. + +It is shipped by default on most [Linux](linux.md) distributions, so it could be used as a replacement for [shell scripts](shell_script.md) +in some applications, but writing such a program in a more efficient language such as [C](c.md) is preferred. + +## Notes +### Stricter language and warnings +This two lines meant to be put at the top of a script serve as boilerplate to make Perl more strict and saner: +```perl +use warnings; +use strict; +``` + +### Sigils +- `$`: scalar value; numbers, strings... +- `@`: [array](array.md) +- `%`: [hash table](hash_table.md) +- `&`: functions; rare in "modern" Perl code. + +### Feature toggling +For its credit, Perl has a decent level of backwards compatibility compared to other scripting +languages, so some features that may cause problems with older code are disabled by default. Perl +allows enabling a set of features manually, for example here we enable the `say` function: +```perl +use feature 'say'; # this can also be an array of features... +``` +More conveniently, instead of enabling each feature manually one can simply pick a certain version +and all of its features will be enabled: +```perl +use v5.34; # enables `say`, `defer`, `try`-`catch` and more... +``` + +## Automatically die on any error +This makes a Perl script commit suicide if any error is raised (akin to Bash's `set -e`): +```perl +use autodie; +``` + +## Examples +### Hello world +```perl +# with the classical `print`: +print "Hello, World!\n"; +# with `say`: +say "Hello, World!"; +``` + +### As a replacement for `sed` +It is possible to use Perl as `sed` to benefit from its more powerful regex: +```sh +# you can also pass `-i` to do inline replacement, like in sed +perl -p -e 's/foo/bar/g' files... +``` + +TODO + +## Resources +- [Perl official website](https://www.perl.org/) +- [Perl Maven](https://perlmaven.com/): page containing tutorials and more