diff options
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/IO::Handle.3pm')
-rw-r--r-- | upstream/mageia-cauldron/man3pm/IO::Handle.3pm | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/IO::Handle.3pm b/upstream/mageia-cauldron/man3pm/IO::Handle.3pm new file mode 100644 index 00000000..e3da3130 --- /dev/null +++ b/upstream/mageia-cauldron/man3pm/IO::Handle.3pm @@ -0,0 +1,304 @@ +.\" -*- 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 "IO::Handle 3pm" +.TH IO::Handle 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" 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 +IO::Handle \- supply object methods for I/O handles +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 1 +\& use IO::Handle; +\& +\& my $io = IO::Handle\->new(); +\& if ($io\->fdopen(fileno(STDIN),"r")) { +\& print $io\->getline; +\& $io\->close; +\& } +\& +\& my $io = IO::Handle\->new(); +\& if ($io\->fdopen(fileno(STDOUT),"w")) { +\& $io\->print("Some text\en"); +\& } +\& +\& # setvbuf is not available by default on Perls 5.8.0 and later. +\& use IO::Handle \*(Aq_IOLBF\*(Aq; +\& $io\->setvbuf(my $buffer_var, _IOLBF, 1024); +\& +\& undef $io; # automatically closes the file if it\*(Aqs open +\& +\& autoflush STDOUT 1; +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +\&\f(CW\*(C`IO::Handle\*(C'\fR is the base class for all other IO handle classes. It is +not intended that objects of \f(CW\*(C`IO::Handle\*(C'\fR would be created directly, +but instead \f(CW\*(C`IO::Handle\*(C'\fR is inherited from by several other classes +in the IO hierarchy. +.PP +If you are reading this documentation, looking for a replacement for +the \f(CW\*(C`FileHandle\*(C'\fR package, then I suggest you read the documentation +for \f(CW\*(C`IO::File\*(C'\fR too. +.SH CONSTRUCTOR +.IX Header "CONSTRUCTOR" +.IP "new ()" 4 +.IX Item "new ()" +Creates a new \f(CW\*(C`IO::Handle\*(C'\fR object. +.IP "new_from_fd ( FD, MODE )" 4 +.IX Item "new_from_fd ( FD, MODE )" +Creates an \f(CW\*(C`IO::Handle\*(C'\fR like \f(CW\*(C`new\*(C'\fR does. +It requires two parameters, which are passed to the method \f(CW\*(C`fdopen\*(C'\fR; +if the fdopen fails, the object is destroyed. Otherwise, it is returned +to the caller. +.SH METHODS +.IX Header "METHODS" +See perlfunc for complete descriptions of each of the following +supported \f(CW\*(C`IO::Handle\*(C'\fR methods, which are just front ends for the +corresponding built-in functions: +.PP +.Vb 10 +\& $io\->close +\& $io\->eof +\& $io\->fcntl( FUNCTION, SCALAR ) +\& $io\->fileno +\& $io\->format_write( [FORMAT_NAME] ) +\& $io\->getc +\& $io\->ioctl( FUNCTION, SCALAR ) +\& $io\->read ( BUF, LEN, [OFFSET] ) +\& $io\->print ( ARGS ) +\& $io\->printf ( FMT, [ARGS] ) +\& $io\->say ( ARGS ) +\& $io\->stat +\& $io\->sysread ( BUF, LEN, [OFFSET] ) +\& $io\->syswrite ( BUF, [LEN, [OFFSET]] ) +\& $io\->truncate ( LEN ) +.Ve +.PP +See perlvar for complete descriptions of each of the following +supported \f(CW\*(C`IO::Handle\*(C'\fR methods. All of them return the previous +value of the attribute and takes an optional single argument that when +given will set the value. If no argument is given the previous value +is unchanged (except for \f(CW$io\fR\->autoflush will actually turn ON +autoflush by default). +.PP +.Vb 7 +\& $io\->autoflush ( [BOOL] ) $| +\& $io\->format_page_number( [NUM] ) $% +\& $io\->format_lines_per_page( [NUM] ) $= +\& $io\->format_lines_left( [NUM] ) $\- +\& $io\->format_name( [STR] ) $~ +\& $io\->format_top_name( [STR] ) $^ +\& $io\->input_line_number( [NUM]) $. +.Ve +.PP +The following methods are not supported on a per-filehandle basis. +.PP +.Vb 4 +\& IO::Handle\->format_line_break_characters( [STR] ) $: +\& IO::Handle\->format_formfeed( [STR]) $^L +\& IO::Handle\->output_field_separator( [STR] ) $, +\& IO::Handle\->output_record_separator( [STR] ) $\e +\& +\& IO::Handle\->input_record_separator( [STR] ) $/ +.Ve +.PP +Furthermore, for doing normal I/O you might need these: +.ie n .IP "$io\->fdopen ( FD, MODE )" 4 +.el .IP "\f(CW$io\fR\->fdopen ( FD, MODE )" 4 +.IX Item "$io->fdopen ( FD, MODE )" +\&\f(CW\*(C`fdopen\*(C'\fR is like an ordinary \f(CW\*(C`open\*(C'\fR except that its first parameter +is not a filename but rather a file handle name, an IO::Handle object, +or a file descriptor number. (For the documentation of the \f(CW\*(C`open\*(C'\fR +method, see IO::File.) +.ie n .IP $io\->opened 4 +.el .IP \f(CW$io\fR\->opened 4 +.IX Item "$io->opened" +Returns true if the object is currently a valid file descriptor, false +otherwise. +.ie n .IP $io\->getline 4 +.el .IP \f(CW$io\fR\->getline 4 +.IX Item "$io->getline" +This works like <$io> described in "I/O Operators" in perlop +except that it's more readable and can be safely called in a +list context but still returns just one line. If used as the conditional +within a \f(CW\*(C`while\*(C'\fR or C\-style \f(CW\*(C`for\*(C'\fR loop, however, you will need to +emulate the functionality of <$io> with \f(CW\*(C`defined($_ = $io\->getline)\*(C'\fR. +.ie n .IP $io\->getlines 4 +.el .IP \f(CW$io\fR\->getlines 4 +.IX Item "$io->getlines" +This works like <$io> when called in a list context to read all +the remaining lines in a file, except that it's more readable. +It will also \fBcroak()\fR if accidentally called in a scalar context. +.ie n .IP "$io\->ungetc ( ORD )" 4 +.el .IP "\f(CW$io\fR\->ungetc ( ORD )" 4 +.IX Item "$io->ungetc ( ORD )" +Pushes a character with the given ordinal value back onto the given +handle's input stream. Only one character of pushback per handle is +guaranteed. +.ie n .IP "$io\->write ( BUF, LEN [, OFFSET ] )" 4 +.el .IP "\f(CW$io\fR\->write ( BUF, LEN [, OFFSET ] )" 4 +.IX Item "$io->write ( BUF, LEN [, OFFSET ] )" +This \f(CW\*(C`write\*(C'\fR is somewhat like \f(CW\*(C`write\*(C'\fR found in C, in that it is the +opposite of read. The wrapper for the perl \f(CW\*(C`write\*(C'\fR function is +called \f(CW\*(C`format_write\*(C'\fR. However, whilst the C \f(CW\*(C`write\*(C'\fR function returns +the number of bytes written, this \f(CW\*(C`write\*(C'\fR function simply returns true +if successful (like \f(CW\*(C`print\*(C'\fR). A more C\-like \f(CW\*(C`write\*(C'\fR is \f(CW\*(C`syswrite\*(C'\fR +(see above). +.ie n .IP $io\->error 4 +.el .IP \f(CW$io\fR\->error 4 +.IX Item "$io->error" +Returns a true value if the given handle has experienced any errors +since it was opened or since the last call to \f(CW\*(C`clearerr\*(C'\fR, or if the +handle is invalid. It only returns false for a valid handle with no +outstanding errors. +.ie n .IP $io\->clearerr 4 +.el .IP \f(CW$io\fR\->clearerr 4 +.IX Item "$io->clearerr" +Clear the given handle's error indicator. Returns \-1 if the handle is +invalid, 0 otherwise. +.ie n .IP $io\->sync 4 +.el .IP \f(CW$io\fR\->sync 4 +.IX Item "$io->sync" +\&\f(CW\*(C`sync\*(C'\fR synchronizes a file's in-memory state with that on the +physical medium. \f(CW\*(C`sync\*(C'\fR does not operate at the perlio api level, but +operates on the file descriptor (similar to sysread, sysseek and +systell). This means that any data held at the perlio api level will not +be synchronized. To synchronize data that is buffered at the perlio api +level you must use the flush method. \f(CW\*(C`sync\*(C'\fR is not implemented on all +platforms. Returns "0 but true" on success, \f(CW\*(C`undef\*(C'\fR on error, \f(CW\*(C`undef\*(C'\fR +for an invalid handle. See \fBfsync\fR\|(3c). +.ie n .IP $io\->flush 4 +.el .IP \f(CW$io\fR\->flush 4 +.IX Item "$io->flush" +\&\f(CW\*(C`flush\*(C'\fR causes perl to flush any buffered data at the perlio api level. +Any unread data in the buffer will be discarded, and any unwritten data +will be written to the underlying file descriptor. Returns "0 but true" +on success, \f(CW\*(C`undef\*(C'\fR on error. +.ie n .IP "$io\->printflush ( ARGS )" 4 +.el .IP "\f(CW$io\fR\->printflush ( ARGS )" 4 +.IX Item "$io->printflush ( ARGS )" +Turns on autoflush, print ARGS and then restores the autoflush status of the +\&\f(CW\*(C`IO::Handle\*(C'\fR object. Returns the return value from print. +.ie n .IP "$io\->blocking ( [ BOOL ] )" 4 +.el .IP "\f(CW$io\fR\->blocking ( [ BOOL ] )" 4 +.IX Item "$io->blocking ( [ BOOL ] )" +If called with an argument \f(CW\*(C`blocking\*(C'\fR will turn on non-blocking IO if +\&\f(CW\*(C`BOOL\*(C'\fR is false, and turn it off if \f(CW\*(C`BOOL\*(C'\fR is true. +.Sp +\&\f(CW\*(C`blocking\*(C'\fR will return the value of the previous setting, or the +current setting if \f(CW\*(C`BOOL\*(C'\fR is not given. +.Sp +If an error occurs \f(CW\*(C`blocking\*(C'\fR will return undef and \f(CW$!\fR will be set. +.PP +If the C functions \fBsetbuf()\fR and/or \fBsetvbuf()\fR are available, then +\&\f(CW\*(C`IO::Handle::setbuf\*(C'\fR and \f(CW\*(C`IO::Handle::setvbuf\*(C'\fR set the buffering +policy for an IO::Handle. The calling sequences for the Perl functions +are the same as their C counterparts\-\-including the constants \f(CW\*(C`_IOFBF\*(C'\fR, +\&\f(CW\*(C`_IOLBF\*(C'\fR, and \f(CW\*(C`_IONBF\*(C'\fR for \fBsetvbuf()\fR\-\-except that the buffer parameter +specifies a scalar variable to use as a buffer. You should only +change the buffer before any I/O, or immediately after calling flush. +.PP +WARNING: The \fBIO::Handle::setvbuf()\fR is not available by default on +Perls 5.8.0 and later because \fBsetvbuf()\fR is rather specific to using +the stdio library, while Perl prefers the new perlio subsystem instead. +.PP +WARNING: A variable used as a buffer by \f(CW\*(C`setbuf\*(C'\fR or \f(CW\*(C`setvbuf\*(C'\fR \fBmust not +be modified\fR in any way until the IO::Handle is closed or \f(CW\*(C`setbuf\*(C'\fR or +\&\f(CW\*(C`setvbuf\*(C'\fR is called again, or memory corruption may result! Remember that +the order of global destruction is undefined, so even if your buffer +variable remains in scope until program termination, it may be undefined +before the file IO::Handle is closed. Note that you need to import the +constants \f(CW\*(C`_IOFBF\*(C'\fR, \f(CW\*(C`_IOLBF\*(C'\fR, and \f(CW\*(C`_IONBF\*(C'\fR explicitly. Like C, setbuf +returns nothing. setvbuf returns "0 but true", on success, \f(CW\*(C`undef\*(C'\fR on +failure. +.PP +Lastly, there is a special method for working under \fB\-T\fR and setuid/gid +scripts: +.ie n .IP $io\->untaint 4 +.el .IP \f(CW$io\fR\->untaint 4 +.IX Item "$io->untaint" +Marks the object as taint-clean, and as such data read from it will also +be considered taint-clean. Note that this is a very trusting action to +take, and appropriate consideration for the data source and potential +vulnerability should be kept in mind. Returns 0 on success, \-1 if setting +the taint-clean flag failed. (eg invalid handle) +.SH NOTE +.IX Header "NOTE" +An \f(CW\*(C`IO::Handle\*(C'\fR object is a reference to a symbol/GLOB reference (see +the Symbol package). Some modules that +inherit from \f(CW\*(C`IO::Handle\*(C'\fR may want to keep object related variables +in the hash table part of the GLOB. In an attempt to prevent modules +trampling on each other I propose the that any such module should prefix +its variables with its own name separated by _'s. For example the IO::Socket +module keeps a \f(CW\*(C`timeout\*(C'\fR variable in 'io_socket_timeout'. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +perlfunc, +"I/O Operators" in perlop, +IO::File +.SH BUGS +.IX Header "BUGS" +Due to backwards compatibility, all filehandles resemble objects +of class \f(CW\*(C`IO::Handle\*(C'\fR, or actually classes derived from that class. +They actually aren't. Which means you can't derive your own +class from \f(CW\*(C`IO::Handle\*(C'\fR and inherit those methods. +.SH HISTORY +.IX Header "HISTORY" +Derived from FileHandle.pm by Graham Barr <\fIgbarr@pobox.com\fR> |