portable issues: use IO::Pipely - Portably create pipe() or pipe-like handles