Perl

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

From Wikipedia:

Perl is a family of high-level, general-purpose, interpreted, dynamic programming languages. The languages in this family include Perl 5 and Raku (formerly Perl 6).
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 gained widespread popularity in the late 1990s as a CGI scripting language, in part due to its then unsurpassed regular expression and string parsing abilities.

Installation

Perl 5

Install perl.

Raku

A Raku compiler is provided by rakudoAUR that targets MoarVM and JVM. This AUR package has moarvmAUR as a dependency.

Commands

Perl 5

The Perl language interpreter:

$ perl

Perl bug reporting:

$ perlbug

Lookup the Perl documentation in POD format:

$ perldoc

Send the Perl authors and maintainers a thank you message:

$ perlthanks

Raku

Rakudo "raku" compiler:

$ raku

Perl 5 examples

Classic "Hello, World!" for calling with $ perl hello-world.pl:

hello-world.pl
use strict;
use warnings;

print "Hello, World!\n";

With the executable bit set for calling with $ ./hello-you:

hello-you
#!/usr/bin/env perl

use strict;
use warnings;

print "Please enter your name: ";
my $name = <STDIN>;
chomp ($name);
print "Hello $name. Glad to meet you.\n";

A one liner to print the first 10 Fibonacci numbers:

$ perl -le'$==1,(1x$_)=~/(^)(1|11\1)*(?{$=++})^/,print$=for 0..10'

Package management

The Comprehensive Perl Archive Network (CPAN) is a repository of over 250,000 software modules and accompanying documentation written in the Perl programming language by over 12,000 contributors.

CPAN is also the name of a Perl module, CPAN.pm, which is used to download and install Perl software from the CPAN archive.

pacman and AUR

A number of popular CPAN modules are available as packages in the Arch repositories. There are further modules available in the AUR.

CPAN.pm

The CPAN.pm module is included with Perl. It can be used interactively from the shell or in Perl scripts.

Configuring cpan

Before first use, the module needs to be configured. This is done interactively from the shell with (some output omitted):

$ cpan
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Automated configuration will suit most users. Answering yes, the configuration will continue with:

To install modules, you need to configure a local Perl library directory or
escalate your privileges. CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available). You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

If you want cpan to install modules in your home directory choose local::lib. To install them system-wide choose sudo. Choosing sudo the configuration ends:

Autoconfiguration complete.

commit: wrote '/home/username/.cpan/CPAN/MyConfig.pm'

Choosing the local::lib option will result in addition modules being installed.

Choosing not to use automated configuration allows the user to set cpan options interactively in the shell. The table below shows some option names with a brief description and default value. More detailed information is displayed for each option during configuration.

Name Description Default
cpan_home CPAN build and cache directory $HOME/.cpan
keep_source_where Download target directory $HOME/.cpan/sources
build_dir Build process directory $HOME/.cpan/build
prefs_dir Customizable modules options directory $HOME/.cpan/prefs
build_cache Cache size for build directory 100MB
cleanup_after_install Remove build directory after successful install No
shell Preferred shell /bin/bash
halt_on_failure Halt on failure No
colorize_output Turn on colored output No
histfile History file location $HOME/.cpan/histfile
histsize History file size 100 lines

The configuration file $HOME/.cpan/CPAN/MyConfig.pm can be edited with your text editor of choice.

Usage examples

To simply install a modules pass them as parameters to cpan (multiple module names are separated by spaces):

$ cpan Acme::MetaSyntactic

The following examples are all in the cpan interactive shell, started with:

$ cpan

Display information on a module:

cpan[1]> m Acme::MetaSyntactic
Reading '/home/username/.cpan/Metadata'
  Database was generated on Fri, 08 Dec 2017 02:17:03 GMT
Module id = Acme::MetaSyntactic
    CPAN_USERID  BOOK (Philippe Bruhat (BooK) <book@cpan.org>)
    CPAN_VERSION 1.014
    CPAN_FILE    B/BO/BOOK/Acme-MetaSyntactic-1.014.tar.gz
    INST_FILE    (not installed)

View module README:

cpan[2]> readme Acme::MetaSyntactic
Acme::MetaSyntactic - Themed metasyntactic variables

DESCRIPTION

When writing code examples, it's always easy at the beginning:

   my $foo = "bar";
   $foo .= "baz";   # barbaz
...

Install a module:

cpan[3]> install Acme::MetaSyntactic

Widget bindings

The following widget toolkit bindings are available:

  • gtk2-perl — GTK2 bindings
http://gtk2-perl.sourceforge.net/ || gtk2-perl
  • perl-gtk3 — GTK3 bindings
https://metacpan.org/release/Gtk3 || perl-gtk3
  • Perl/TK — Tk bindings
https://search.cpan.org/dist/Tk/ || perl-tk
  • perlqtQt bindings
https://github.com/KDE/perlqt || perlqt
  • wxPerl — wxWidgets bindings
http://www.wxperl.it/ || perl-wxAUR
  • Prima — a perl multiplatform graphic toolkit
https://metacpan.org/release/Prima || perl-primaAUR

Or you can just draw asci art to create simple gui/webpage user interface:

  • GUIDeFATE — Graphical User Interface Design From A Text Editor
https://metacpan.org/pod/GUIDeFATE || perl-guidefateAUR[broken link: package not found]

To use these with Perl, you may need to install the associated widget kits.

Tips and tricks

Improved module management

cpanminus

cpanminus extends module management and aims to be zero configuration and integrates with local::db.

Install the cpanminus package.

The cpanminus documentation gives examples.

ucpan

ucpan is a nice, fully automatic updater for CPAN modules (especially installed in local-lib). To install use:

cpan App::ucpan

Bundle::CPAN

Installing the Bundle::CPAN distribution will add a lot of nice functionality to CPAN.pm.

$ cpan Bundle::CPAN

Re-run cpan configuration

$ cpan
cpan[1]> o conf init

Create new module

module-starter

Module::Starter helps you create your new module... Install:

cpanm Module::Starter

Usage:

module-starter --module=App::foobar  --author="My name here" --email=my@email.here --mb

This going to create your module tree...

Note: Option --mb create module which will use Module::Build. The next part assumes that you are using this module.

To add dependiences, put module_name => version_or_0 inside $builder -> requires in file Build.PL

To install required dependiences for your project, run inside App-foobar folder:

cpanm --installdeps .

To skip git folder, add under $builder

add_to_manifest_skip => [ '.git' ],

Adding scripts can by done like this:

mkdir bin
touch bin/foobar

To run this script:

perl -Ilib bin/foobar

You can change your project version here: lib/App/foobar.pm

To install your module run this command in module root folder:

cpanm .

See more on: cpan page, cookbook

See also

Perl 5

Raku

CPAN

Tutorials

Miscellaneous