don't check $^O on every call to print / say
do not use carp if not needed
add optional callback to run() for passing data to sub-processes
pass $proc into run cb instead of $pid
test for run cb