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

Shell::Tools::Extra - Perl extension to reduce boilerplate in Perl shell scripts (Extra modules)

Synopsis

use Shell::Tools::Extra;    # is the same as the following:

use Shell::Tools; # turns on warnings and strict and exports many funcs
use Try::Tiny qw/try catch finally/;
use Path::Class qw/dir file/;
use File::pushd 'pushd';
use File::Find::Rule 'rule';

# and
use Shell::Tools::Extra  Shell => [ IPC_RUN3_SHELL_ARGS ];
# is the same as
use IPC::Run3::Shell IPC_RUN3_SHELL_ARGS;

Description

This module exports a collection of functions from selected Perl modules from CPAN, in addition to those from Shell::Tools.

Version

This document describes version 0.04 of Shell::Tools::Extra.

Exports

This module exports the following modules and functions.

Like Shell::Tools, each module has an Exporter tag that is the same name as the module.

IPC::Run3::Shell

use Shell::Tools::Extra  Shell => 'echo';
  # = use IPC::Run3::Shell 'echo';                # import "echo"
use Shell::Tools::Extra  Shell => [ qw/cat who/ ];
  # = use IPC::Run3::Shell qw/cat who/;           # import "cat" and "who"
use Shell::Tools::Extra  Shell => [ [ d => '/bin/date' ] ];
  # = use IPC::Run3::Shell [ d => '/bin/date' ];  # alias "d" to "date"

The word Shell followed by either a string or an array reference may be placed anywhere in the import list, which will cause the IPC::Run3::Shell module to be loaded with those arguments. If no Shell arguments are present in use, this module will not be loaded and it does not need to be installed.

Try::Tiny

try { die "foo" }
catch { warn "caught error: $_\n" }  # not $@
finally { print "finally" };

Path::Class

my $dir      = dir('foo', 'bar');        # Path::Class::Dir object
my $file     = file('bob', 'file.txt');  # Path::Class::File object
# interfaces to File::Spec's tempdir and tempfile
my $tempdir  = Path::Class::tempdir(CLEANUP=>1);   # isa Path::Class::Dir
my ($fh,$fn) = $tempdir->tempfile(UNLINK=>1);      # $fn is NOT an object

(Note that Path::Class may not work properly with Perl before v5.8.0.)

File::pushd

{
    my $dir = pushd('/tmp');
    # working directory changed to /tmp
}
# working directory has reverted to previous

File::Find::Rule

my @files = rule->file->name('*.pm')->in(@INC);
my $rule = rule->dir->name(qr/te?mp/i)->start($ENV{HOME});
while ( defined( my $tmpdir = $rule->match ) ) {
    ...
}

Author, Copyright, and License

Copyright (c) 2014 Hauke Daempfling (haukex@zero-g.net).

This library is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself.

For more information see the Perl Artistic License, which should have been distributed with your copy of Perl. Try the command "perldoc perlartistic" or see http://perldoc.perl.org/perlartistic.html.