Too many my $fh:s.
[p5sagit/p5-mst-13.2.git] / lib / PerlIO.pm
index ad99a30..5777679 100644 (file)
@@ -115,11 +115,11 @@ to a such a stream.
 =item raw
 
 The C<:raw> layer is I<defined> as being identical to calling
-C<binmode($fh)> - the stream is made suitable for passing binary
-data i.e. each byte is passed as-is. The stream will still be
-buffered. Unlike earlier versions of perl C<:raw> is I<not> just the
-inverse of C<:crlf> - other layers which would affect the binary nature of
-the stream are also removed or disabled.
+C<binmode($fh)> - the stream is made suitable for passing binary data
+i.e. each byte is passed as-is. The stream will still be
+buffered. Unlike in the earlier versions of Perl C<:raw> is I<not>
+just the inverse of C<:crlf> - other layers which would affect the
+binary nature of the stream are also removed or disabled.
 
 The implementation of C<:raw> is as a pseudo-layer which when "pushed"
 pops itself and then any layers which do not declare themselves as suitable
@@ -165,8 +165,9 @@ in Perl using the latter) come with the Perl distribution.
 
 Use C<:encoding(ENCODING)> either in open() or binmode() to install
 a layer that does transparently character set and encoding transformations,
-for example from Shift-JIS to Unicode.  Note that an C<:encoding> also
-enables C<:utf8>.  See L<PerlIO::encoding> for more information.
+for example from Shift-JIS to Unicode.  Note that under C<stdio>
+an C<:encoding> also enables C<:utf8>.  See L<PerlIO::encoding>
+for more information.
 
 =item :via
 
@@ -203,7 +204,7 @@ translation for text files then the default layers are :
 level layer.)
 
 Otherwise if C<Configure> found out how to do "fast" IO using system's
-stdio, then the default layers are :
+stdio, then the default layers are:
 
   unix stdio
 
@@ -223,23 +224,39 @@ This can be used to see the effect of/bugs in the various layers e.g.
   PERLIO=stdio  ./perl harness
   PERLIO=perlio ./perl harness
 
+For the various value of PERLIO see L<perlrun/PERLIO>.
+
 =head2 Querying the layers of filehandle
 
 The following returns the B<names> of the PerlIO layers on a filehandle.
 
-   my @layers = PerlIO::get_layers(FH);
+   my @layers = PerlIO::get_layers($fh); # Or FH, *FH, "FH".
 
 The layers are returned in the order an open() or binmode() call would
-use them.  Note that the stack begings (normally) from C<stdio>, the
-platform specific low-level I/O (like C<unix>) is not part of the stack.
+use them.  Note that the "default stack" depends on the operating
+system and on the perl version.
+
+The following table summarizes the default layers on UNIX-like and
+DOS-like platforms and depending on the setting of the C<$ENV{PERLIO}>:
+
+ PERLIO     UNIX-like                   DOS-like
+ unset / "" unix perlio / stdio [1]     unix crlf
+ stdio      unix perlio / stdio [1]     stdio
+ perlio     unix perlio                 unix perlio
+ mmap       unix mmap                   unix mmap
+
+ # [1] "stdio" if Configure found out how to do "fast stdio" (depends
+ # on the stdio implementation) and in Perl 5.8, otherwise "unix perlio"
 
 By default the layers from the input side of the filehandle is
 returned, to get the output side use the optional C<output> argument:
 
-   my @layers = PerlIO::get_layers(FH, output => 1);
+   my @layers = PerlIO::get_layers($fh, output => 1);
 
 (Usually the layers are identical on either side of a filehandle but
-for example with sockets there may be differences.)
+for example with sockets there may be differences, or if you have
+been using the C<open> pragma.)
 
 There is no set_layers(), nor does get_layers() return a tied array
 mirroring the stack, or anything fancy like that.  This is not
@@ -254,7 +271,7 @@ the name of the layer, and certain layers (like C<utf8>) are not real
 layers but instead flags on real layers: to get all of these returned
 separately use the optional C<separate> argument:
 
-   my @layer_and_args_and_flags = PerlIO::get_layers(FH, details => 1);
+   my @layer_and_args_and_flags = PerlIO::get_layers($fh, details => 1);
 
 The result will be up to be three times the number of layers:
 the first element will be a name, the second element the arguments