package open;
use warnings;
-our $VERSION = '1.05';
+our $VERSION = '1.06';
require 5.008001; # for PerlIO::get_layers()
unless defined $locale_encoding;
(warnings::warnif("layer", "Cannot figure out an encoding to use"), last)
unless defined $locale_encoding;
- if ($locale_encoding =~ /^utf-?8$/i) {
- $layer = "utf8";
- } else {
- $layer = "encoding($locale_encoding)";
- }
+ $layer = "encoding($locale_encoding)";
$std = 1;
} else {
my $target = $layer; # the layer name itself
use open IO => ':locale';
- use open ':utf8';
+ use open ':encoding(utf8)';
use open ':locale';
use open ':encoding(iso-8859-7)';
These are equivalent
- use open ':utf8';
- use open IO => ':utf8';
+ use open ':encoding(utf8)';
+ use open IO => ':encoding(utf8)';
as are these
many encodings have several aliases. See L<Encode::Supported> for
details and the list of supported locales.
-Note that C<:utf8> PerlIO layer must always be specified exactly like
-that, it is not subject to the loose matching of encoding names.
-
When open() is given an explicit list of layers (with the three-arg
syntax), they override the list declared using this pragma.
the C<:utf8> or C<:encoding> subpragmas, it converts the standard
filehandles (STDIN, STDOUT, STDERR) to comply with encoding selected
for input/output handles. For example, if both input and out are
-chosen to be C<:utf8>, a C<:std> will mean that STDIN, STDOUT, and
-STDERR are also in C<:utf8>. On the other hand, if only output is
-chosen to be in C<< :encoding(koi8r) >>, a C<:std> will cause only the
-STDOUT and STDERR to be in C<koi8r>. The C<:locale> subpragma
+chosen to be C<:encoding(utf8)>, a C<:std> will mean that STDIN, STDOUT,
+and STDERR are also in C<:encoding(utf8)>. On the other hand, if only
+output is chosen to be in C<< :encoding(koi8r) >>, a C<:std> will cause
+only the STDOUT and STDERR to be in C<koi8r>. The C<:locale> subpragma
implicitly turns on C<:std>.
The logic of C<:locale> is described in full in L<encoding>,