NAME
Command::Runner - run external commands and Perl code refs
SYNOPSIS
use Command::Runner;
my $cmd = Command::Runner->new(
command => ['ls', '-al'],
timeout => 10,
on => {
stdout => sub { warn "out: $_[0]\n" },
stderr => sub { warn "err: $_[0]\n" },
},
);
my $res = $cmd->run;
# you can also use method chains
my $res = Command::Runner->new
->command(sub { warn 1; print 2 })
->redirect(1)
->on(stdout => sub { warn "merged: $_[0]" })
->run;
DESCRIPTION
Command::Runner runs external commands and Perl code refs
METHODS
new
A constructor, which takes:
- command
-
arrays of external commands, strings of external programs, or Perl code refs
CAUTION! Currently this module does NOTHING for quoting. YOU are responsible to quote argument lists. See Win32::ShellQuote and String::ShellQuote.
- timeout
-
timeout second. You can set float second.
- redirect
-
if this is true, stderr redirects to stdout
- keep
-
by default, if stdout/stderr is consumed, it will disappear. Disable this by setting keep option true
- on.stdout, on.stderr
-
code refs that will be called whenever stdout/stderr is available
run
Run command. It returns a hash reference, which contains:
- result
- timeout
- stdout
- stderr
MOTIVATION
I develop a CPAN client App::cpm, where I need to execute external commands and Perl code refs with:
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 <skaji@cpan.org>
COPYRIGHT AND LICENSE
Copyright 2017 Shoichi Kaji <skaji@cpan.org>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.