--- name: IO::Pipe runtime: pp source: src/native/IO/Pipe/pp.rs --- ```{index} single: IO::Pipe; Perl module (pp runtime) ``` # IO::Pipe Native implementation of IO::Pipe Provides object-oriented pipe operations compatible with Perl's IO::Pipe. IO::Pipe objects are blessed hashrefs storing reader/writer fh_ids. For fork-based communication, `reader()`/`writer()` without args just configures the object to the appropriate end of the pipe. # Functions ## new Creates a pipe pair via `pipe(2)`. Returns a blessed IO::Pipe object holding both reader and writer filehandle IDs internally. ```perl use IO::Pipe; my $pipe = IO::Pipe->new(); ``` ## handles Returns two unopened IO::Pipe::End objects (reader, writer) that can be configured independently. ```perl my ($reader, $writer) = $pipe->handles(); ``` ## reader Configures the pipe as the reader end. Without arguments, closes the write end and re-blesses as IO::Pipe::End. With a command, forks a child that execvp's the command with its stdout connected to the pipe; the parent reads from the pipe. ```perl $pipe->reader("ls", "-l"); # fork+exec, parent reads $pipe->reader(); # just configure reader end ``` ## writer Configures the pipe as the writer end. Without arguments, closes the read end and re-blesses as IO::Pipe::End. With a command, forks a child that execvp's the command with its stdin connected to the pipe; the parent writes to the pipe. ```perl $pipe->writer("sort"); # fork+exec, parent writes $pipe->writer(); # just configure writer end ``` # IO::Pipe::End Methods IO::Pipe::End inherits from IO::Handle and adds: ## IO::Pipe::End::new Constructor. Returns an unopened IO::Pipe::End blessed hashref. ## IO::Pipe::End::close Closes the pipe end. If the pipe was created with a command (via `reader(CMD)` or `writer(CMD)`), also waits for the child process to exit.