=over

=item ${^OPEN}
X<${^OPEN}>

An internal variable used by L<PerlIO>.  A string in two parts, separated
by a C<\0> byte, the first part describes the input layers, the second
part describes the output layers.

This is the mechanism that applies the lexical effects of the L<open>
pragma, and the main program scope effects of the C<io> or C<D> options
for the L<-C command-line switch|perlrun/-C [I<numberE<sol>list>]> and
L<PERL_UNICODE environment variable|perlrun/PERL_UNICODE>.

The functions C<accept()>, C<open()>, C<pipe()>, C<readpipe()> (as well
as the related C<qx> and C<`STRING`> operators), C<socket()>,
C<socketpair()>, and C<sysopen()> are affected by the lexical value of
this variable.  The implicit L</ARGV> handle opened by C<readline()> (or
the related C<< <> >> and C<<< <<>> >>> operators) on passed filenames is
also affected (but not if it opens C<STDIN>).  If this variable is not
set, these functions will set the default layers as described in
L<PerlIO/Defaults and how to override them>.

C<open()> ignores this variable (and the default layers) when called with
3 arguments and explicit layers are specified.  Indirect calls to these
functions via modules like L<IO::Handle> are not affected as they occur
in a different lexical scope.  Directory handles such as opened by
C<opendir()> are not currently affected.

This variable was added in Perl v5.8.0.

=back