IPC::Run3::Shell::CLIWrapper - Perl extension for wrapping arbitrary command-line tools


 use IPC::Run3::Shell::CLIWrapper;
 my $git = IPC::Run3::Shell::CLIWrapper->new({chomp=>1}, 'git');
 my @log = $git->log('--oneline');
 my $perl = IPC::Run3::Shell::CLIWrapper
     ->new( { opt_char=>'-' }, 'perl' );
 my $foo = $perl->( [ l => undef, e => q{ print for @ARGV } ],
     '--', 'Hello', 'World!' );
 use JSON::PP qw/decode_json/;
 my $s3api = IPC::Run3::Shell::CLIWrapper->new( { fail_on_stderr => 1,
     stdout_filter => sub { $_=decode_json($_) } },
     qw/ aws --profile MyProfile --output json s3api /);
 my $buckets = $s3api->list_buckets;


This module wraps IPC::Run3::Shell in a layer that translates method calls and their arguments to the command-line arguments of system commands.


The arguments to the constructor are the same as to "make_cmd" in IPC::Run3::Shell, with the addition of the following options, which can be placed in hashref(s) at the beginning of the argument list:


The string to prefix to option names, defaults to "--". Other common values are "-" and perhaps "/" on Windows.


The separator between an option name and its value; if set to undef (the default), then the name and value are two separate items in the argument list.


Boolean to enable or disable the conversion of underscores to dashes in option names and method names. Option values and plain strings remain unchanged. Default is true.

Argument Lists

The name of the method is the first item in the generated argument list. You may also call the object of this class as a code reference, which behaves exactly the same as a method call except no method name is added as the first item of the argument list. This can be useful if you want to start with options, or you want to call commands that have the same names as the methods of this class (new, AUTOLOAD, and DESTROY) or the built-ins of the UNIVERSAL class, such as can.

The arguments to the method call (or code reference) are translated as follows:

Array references

These must have an even number of items, and every two items represent a pair of an option name and its value. If the value is undef, it is omitted from the generated argument list. See also the options described in "new".

Other values (strings, hash references, etc.)

Act the same as arguments to IPC::Run3::Shell. This means that hash references can be passed as the last item(s) in the list to set options.

Author, Copyright, and License

Copyright (c) 2020 Hauke Daempfling (

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