sub _run_ReadWrite { my ($invocant, $cmd, $input) = @_; # declare needed variables and connect to process local (*CHILD_IN, *CHILD_OUT, *CHILD_ERR); my ($childpid, @outlines, @errlines); $childpid = open3(*CHILD_IN, *CHILD_OUT, *CHILD_ERR, $cmd); # feed input to process, then close input print CHILD_IN $input; close (CHILD_IN); # save output and errors, close those channels and the process chomp(@outlines = ); close (CHILD_OUT); chomp(@errlines = ); close (CHILD_ERR); waitpid($childpid, 0); # return the result of the call return { OUTPUT => \@outlines , ERRORS => \@errlines }; }