.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "IPC::Run::IO 3pm" .TH IPC::Run::IO 3pm 2024-04-01 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME IPC::Run::IO \-\- I/O channels for IPC::Run. .SH SYNOPSIS .IX Header "SYNOPSIS" \&\fBNOT IMPLEMENTED YET ON Win32! Win32 does not allow select() on normal file descriptors; IPC::RUN::IO needs to use IPC::Run::Win32Helper to do this.\fR .PP .Vb 1 \& use IPC::Run qw( io ); \& \& ## The sense of \*(Aq>\*(Aq and \*(Aq<\*(Aq is opposite of perl\*(Aqs open(), \& ## but agrees with IPC::Run. \& $io = io( "filename", \*(Aq>\*(Aq, \e$recv ); \& $io = io( "filename", \*(Aqr\*(Aq, \e$recv ); \& \& ## Append to $recv: \& $io = io( "filename", \*(Aq>>\*(Aq, \e$recv ); \& $io = io( "filename", \*(Aqra\*(Aq, \e$recv ); \& \& $io = io( "filename", \*(Aq<\*(Aq, \e$send ); \& $io = io( "filename", \*(Aqw\*(Aq, \e$send ); \& \& $io = io( "filename", \*(Aq<<\*(Aq, \e$send ); \& $io = io( "filename", \*(Aqwa\*(Aq, \e$send ); \& \& ## Handles / IO objects that the caller opens: \& $io = io( \e*HANDLE, \*(Aq<\*(Aq, \e$send ); \& \& $f = IO::Handle\->new( ... ); # Any subclass of IO::Handle \& $io = io( $f, \*(Aq<\*(Aq, \e$send ); \& \& require IPC::Run::IO; \& $io = IPC::Run::IO\->new( ... ); \& \& ## Then run(), harness(), or start(): \& run $io, ...; \& \& ## You can, of course, use io() or IPC::Run::IO\->new() as an \& ## argument to run(), harness, or start(): \& run io( ... ); .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" This class and module allows filehandles and filenames to be harnessed for I/O when used IPC::Run, independent of anything else IPC::Run is doing (except that errors & exceptions can affect all things that IPC::Run is doing). .SH SUBCLASSING .IX Header "SUBCLASSING" INCOMPATIBLE CHANGE: due to the awkwardness introduced in ripping pseudohashes out of Perl, this class \fIno longer\fR uses the fields pragma. .SH SUBROUTINES .IX Header "SUBROUTINES" .IP new 4 .IX Item "new" I think it takes >> or << along with some other data. .Sp TODO: Needs more thorough documentation. Patches welcome. .IP filename 4 .IX Item "filename" Gets/sets the filename. Returns the value after the name change, if any. .IP init 4 .IX Item "init" Does initialization required before this can be run. This includes \fBopen()\fRing the file, if necessary, and clearing the destination scalar if necessary. .IP open 4 .IX Item "open" If a filename was passed in, opens it. Determines if the handle is open via \fBfileno()\fR. Throws an exception on error. .IP open_pipe 4 .IX Item "open_pipe" If this is a redirection IO object, this opens the pipe in a platform independent manner. .IP close 4 .IX Item "close" Closes the handle. Throws an exception on failure. .IP fileno 4 .IX Item "fileno" Returns the fileno of the handle. Throws an exception on failure. .IP mode 4 .IX Item "mode" Returns the operator in terms of 'r', 'w', and 'a'. There is a state \&'ra', unlike Perl's \fBopen()\fR, which indicates that data read from the handle or file will be appended to the output if the output is a scalar. This is only meaningful if the output is a scalar, it has no effect if the output is a subroutine. .Sp The redirection operators can be a little confusing, so here's a reference table: .Sp .Vb 6 \& > r Read from handle in to process \& < w Write from process out to handle \& >> ra Read from handle in to process, appending it to existing \& data if the destination is a scalar. \& << wa Write from process out to handle, appending to existing \& data if IPC::Run::IO opened a named file. .Ve .IP op 4 .IX Item "op" Returns the operation: '<', '>', '<<', '>>'. See "mode" if you want to spell these 'r', 'w', etc. .IP binmode 4 .IX Item "binmode" Sets/gets whether this pipe is in binmode or not. No effect off of Win32 OSs, of course, and on Win32, no effect after the harness is \fBstart()\fRed. .IP dir 4 .IX Item "dir" Returns the first character of \f(CW$self\fR\->op. This is either "<" or ">". .IP poll 4 .IX Item "poll" TODO: Needs confirmation that this is correct. Was previously undocumented. .Sp I believe this is polling the IO for new input and then returns undef if there will never be any more input, 0 if there is none now, but there might be in the future, and TRUE if more input was gotten. .SH AUTHOR .IX Header "AUTHOR" Barrie Slaymaker .SH TODO .IX Header "TODO" Implement bidirectionality.