NAME Command::Runner - run external commands and Perl code refs SYNOPSIS use Command::Runner; my $cmd = Command::Runner->new( command => ['ls', '-al'], timeout => 10, stdout => sub { warn "out: $_[0]\n" }, stderr => sub { warn "err: $_[0]\n" }, ); my $res = $cmd->run; my $untar = Command::Runner->new; $untar->commandf( '%q -dc %q | %q tf -', 'C:\\Program Files (x86)\\GnuWin32\\bin\\gzip.EXE', 'File-ShareDir-Install-0.13.tar.gz' 'C:\\Program Files (x86)\\GnuWin32\\bin\\tar.EXE', ); my $capture = $untar->run->{stdout}; DESCRIPTION Command::Runner runs external commands and Perl code refs METHODS new A constructor, which takes: command an array of external commands, a string of external programs, or a Perl code ref. If an array of external commands is specified, it is automatically quoted on Windows. commandf a command string by sprintf-like syntax. You can use positional formatting with conversions %q (with quoting) and %s (as it is). Here is an example: my $cmd = Command::Runner->new( commandf => [ '%q %q >> %q', '/path/to/cat', 'foo bar.txt', 'out.txt' ], ); # or, you can set it separately my $cmd = Command::Runner->new; $cmd->commandf('%q %q >> %q', '/path/to/cat', 'foo bar.txt', 'out.txt'); See String::Formatter for details. timeout timeout second. You can set float second. redirect if this is true, stderr redirects to stdout keep by default, even if stdout/stderr is consumed, it is preserved for return value. You can disable this behavior by setting keep option false. stdout / stderr a code ref that will be called whenever stdout/stderr is available run Run command. It returns a hash reference, which contains: result timeout stdout stderr pid MOTIVATION I develop a CPAN client App::cpm, where I need to execute external commands and Perl code refs with: timeout quoting flexible logging While App::cpanminus has excellent APIs for such use, I still needed to tweak them in App::cpm. So I ended up creating a seperate module, Command::Runner. AUTHOR Shoichi Kaji COPYRIGHT AND LICENSE Copyright 2017 Shoichi Kaji This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.