=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
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
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 begins (normally) from C<stdio> or from
-C<perlio>. Under C<stdio> the platform specific low-level I/O (like
-C<unix>) is not part of the stack, but under C<perlio> it is.
+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
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