This module is OK for some jobs where you are only inputting or outputting ASCII or otherwise don't care about Unicode encoding. However, if there is any Unicode involved, I don't use this module any more, because this module seems to mess up global variables via switching on and off "binmode" on STDIN, STDOUT, and STDERR. This bug has been reported, but somehow it seemed very difficult to fix.
If using this module and Unicode data, one has to, after each call to run3, add binmode STDOUT, ":utf8"; to restore the original modes on STDOUT, etc. So, although it is a very handy module, for Unicode cases, I do not recommend it.
This is pretty much THE standard basic way to lunch a system command, with or without input, with or without output and error.
While it's not quite so obvious and useful for things need interactive and Expect-like behaviour, for any command that goes to the system and doesn't need to be interactive this is almost always what you want to be using.
Incredibly useful! Despite the incomplete documentation, the interface is intuitive enough to make basic usage possible. I found it very handy for testing perl scripts, as it transparently feeds/captures STDIN and STDOUT from scalars and just works on both Linux and Win32. Still, I wish the documentation were improved as it seems to offer much more than I've managed to puzzle out so far.