NAME
Sys::Cmd::Template - command/process templates for Sys::Cmd
VERSION
0.99.0 (2022-10-05) Development release
SYNOPSIS
use Sys::Cmd::Template qw/cmd_template/;
my $git = cmd_template('git', {
dir => '/proj/subdir',
env => { GIT_DIR => '/proj/.git' },
});
# Get command output, raise exception on failure:
$output = $git->run('status');
# Feed command some input, get output as lines,
# raise exception on failure:
@output = $git->run(qw/commit -F -/, { input => 'feedme' });
# Spawn and interact with a process:
$proc = $git->spawn( @subcmd, { encoding => 'iso-8859-3'} );
while (my $line = $proc->stdout->getline) {
$proc->stdin->print("thanks");
}
my @errors = $proc->stderr->getlines;
$proc->close(); # Done!
# read exit information
$proc->exit(); # exit status
$proc->signal(); # signal
$proc->core(); # core dumped? (boolean)
DESCRIPTION
Sys::Cmd::Template provides "template" objects for system commands. This is useful when you need to make repeated calls to an external binary with the same options or environment settings. "git" and "gpg" are good examples of such commands.
A Sys::Cmd::Template object should represent the common elements of the calls to your external command. The run
, runx
and spawn
methods then merge their arguments and options with these common elements and execute the result with Sys::Cmd.
A single function is exported on demand by this module:
- cmd_template( @cmd, [\%opt] ) => Sys::Cmd::Template
-
Create a new Sys::Cmd::Template object. The first element of
@cmd
will be looked up using File::Which if it is not found as a relative file name.%opt
is an optional hashref containing any of the following key/values:- dir
-
The working directory the command will be run in.
- encoding
-
An string value identifying the encoding of the input/output file-handles. Has no default but Sys::Cmd will default this to 'utf8'.
- env
-
A hashref containing key/values to be added to the current environment at run-time. If a key has an undefined value then the key is removed from the environment altogether.
- input
-
A string which is fed to each command via its standard input, which is then closed.
Sys::Cmd::Template objects (documented below) can of course be created using the standard new
constructor if you prefer that to the cmd_template
function:
$proc = Sys::Cmd::Template->new(
cmd => \@cmd,
dir => '/',
env => { SOME => 'VALUE' },
encoding => 'iso-8859-3',
input => 'feedme',
);
Note that Sys::Cmd::Template objects created this way will not lookup the command using File::Which the way the cmd_template
function does.
CONSTRUCTOR
- new(%args) => Sys::Cmd::Template
-
Create a new Sys::Cmd template object. %args can contain any one of the
cmd
,dir
,encoding
,env
andinput
values as defined as attributes below.
ATTRIBUTES
In contrast with Sys::Cmd the attributes defined here can be modified, and the new values will be used on subsequent method calls.
- cmd
-
An array ref containing the command and its arguments.
- dir
-
The working directory the command will be run in.
- encoding
-
An string value identifying the encoding of the input/output file-handles. Defaults to 'utf8'.
- env
-
A hashref containing key/values to be added to the current environment at run-time. If a key has an undefined value then the key is removed from the environment altogether.
- input
-
A string which is fed to the command via its standard input, which is then closed. Most likely you won't ever want to use this, but it is here for completeness.
METHODS
- run( @cmd, [\%opt] ) => $output | @output
-
Append
@cmd
to thecmd
attribute, execute it using Sys::Cmd and return what the command sent to itsSTDOUT
, raising an exception in the event of error. In array context returns a list instead of a plain string.The command elements can be modified from your objects values with an optional hashref containing the following key/values:
- dir
-
The working directory the command will be run in. Will replace an existing
dir
attribute. - encoding
-
An string value identifying the encoding of the input/output file-handles. Defaults to 'utf8'. Will replace an existing
dir
attribute. - env
-
A hashref containing key/values to be added to the current environment at run-time. If a key has an undefined value then the key is removed from the environment altogether. Will be merged with an existing
env
attribute. - input
-
A string which is fed to the command via its standard input, which is then closed. Will replace an existing
input
attribute.
- runx( @cmd, [\%opt] ) => $outerrput | @outerrput
-
The same as the
run
method but with the command'sSTDERR
output appended to theSTDOUT
output. - spawn( @cmd, [\%opt] ) => Sys::Cmd
-
Returns a Sys::Cmd object representing the process running @cmd (appended to the
cmd
attribute), with attributes set according to the optional \%opt hashref.
SEE ALSO
SUPPORT
- Bug Reporting
-
https://rt.cpan.org/Public/Bug/Report.html?Queue=Sys-Cmd
- Source Code
-
git clone git://github.com/mlawren/sys-cmd.git
AUTHOR
Mark Lawrence <nomad@null.net>.
COPYRIGHT AND LICENSE
Copyright (C) 2011-2021 Mark Lawrence <nomad@null.net>
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.