package Process; use strict; use warnings; use IO::Select; use IPC::Open3; sub createProcess ($) { my($path) = @_; my($selector, $pid, @ready, $fh, $line); $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $path); $selector = IO::Select->new(); $selector->add(*CMD_ERR, *CMD_OUT); while(@ready = $selector->can_read()) { foreach $fh (@ready) { if(fileno($fh) == fileno(CMD_ERR)) { $line = scalar ; if(defined $line) { print STDERR $line; } } else { $line = scalar ; if(defined $line) { print STDOUT $line; } } $selector->remove($fh) if eof($fh); } } waitpid($pid, 0); }