The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

eachperl - a wrapper script for iterating multiple perl binaries

SYNOPSIS

   $ eachperl exec -E 'say "Hello"'

     --- perl5.30.0 --- 
   Hello

     --- bleadperl --- 
   Hello

   ----------
   perl5.30.0          : 0
   bleadperl           : 0

DESCRIPTION

This script iterates over a collection of multiple perl installations, allowing the same command to be invoked across each of them. The list of available perl binaries is given by a config file (see "CONFIG"). The main mode of operation is that each perl binary in turn is executed with supplied commandline arguments; though several other convenience commands are provided for common actions.

COMMANDS

list

Prints a list of each configured perl binary and the detected version.

All configured versions are printed; the selected versions are prefixed by an asterisk.

   $ eachperl --since 5.31 list
     perl5.30.0: /usr/bin/perl5.30.0 (v5.30.0)
   * bleadperl: /home/user/bin/bleadperl (v5.32.0)

exec

The default command. Invokes each perl binary with the given arguments.

Afterwards a table of exit codes is printed, to summarize the run in case the output was long and scrolled away.

   $ eachperl exec -E 'say $]'

     --- perl5.30.0 --- 
   5.030000

     --- bleadperl --- 
   5.032000

   ----------
   perl5.30.0          : 0
   bleadperl           : 0

The word exec is optional if the commandline otherwise begins with a hyphenated option name - which it usually does for short one-line scripts with -M or -E

   $ eachperl -E 'say 1+2'

   $ eachperl -MConfig -E 'say $Config{nvsize}'

install

A convenient wrapper for installing a module using CPAN.

   $ eachperl install A::CPAN::Module

When the module name is exactly . this command is an alias for install-local.

install-local

Install the distribution in the current working directory by directly invoking the build script.

This command implies the --no-system-perl option.

test

A convenient wrapper for testing a module using CPAN.

   $ eachperl test A::CPAN::Module

When the module name is exactly . this command is an alias for test-local.

test-local

Install the distribution in the current working directory by directly invoking the build script.

build-then-perl

Builds and tests the distribution in the current working directory, then invokes perl on the remaining commandline. Remember to include -Mblib to instruct the perl to use the newly-built code

   $ eachperl build-then-perl -Mblib -MMy::Module -E'say My::Module::func()'

modversion

Prints the version of the named module.

   $ eachperl modversion CPAN
   perl5.30.0: 2.22
   bleadperl: 2.27

modpath

Prints the path to the named module.

   $ eachperl modpath CPAN
   perl5.30.0: /usr/share/perl/5.30/CPAN.pm
   bleadperl: /home/user/perl5/perlbrew/perls/bleadperl/lib/5.32.0/CPAN.pm

OPTIONS

--since VER

Selects only perl versions that are at least as new as the requested version. Any perl binaries older than this will be skipped.

--until VER

Selects only perl versions that are at least as old as the requested version. Any perl binaries newer than this will be skipped.

--reverse, -r

Reverses the order in which perl versions are invoked.

--stop-on-fail, -s

Stops running after the first failure. Without this option, every version is attempted even if some fail.

Useful when combined with --reverse to test a module to see how far back in earlier perl versions it will support.

--no-system-perl

Deselects the system perl version. The perl version matching the system version (or rather, the version running this script) is skipped.

--no-test

Skip the Build test or make test step when building a local distribution.

CONFIG

The list of available perls is given by a config file, which is found in the user's home directory at $HOME/.eachperlrc. This should be a file in INI format.

In addition, a file of the same name can be placed at the current working directory (presumably the root directory of a project) to override any settings in the main file.

The following keys are recognised

perls

A space-separated list of command names. Each should be searchable using $PATH but need not be specified as a fully-qualified path.

   perls = perl5.30.0 bleadperl

Default Commandline Options

Default values for the following commandline options can also be supplied:

   since_version = 5.16
   until_version = 5.30

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>