diff options
-rw-r--r-- | lib/open.pm | 16 | ||||
-rw-r--r-- | lib/open.t | 18 |
2 files changed, 28 insertions, 6 deletions
diff --git a/lib/open.pm b/lib/open.pm index 1bfe0d6833..d3f2d1bac8 100644 --- a/lib/open.pm +++ b/lib/open.pm @@ -1,7 +1,7 @@ package open; use warnings; -our $VERSION = '1.08'; +our $VERSION = '1.09'; require 5.008001; # for PerlIO::get_layers() @@ -95,16 +95,22 @@ sub import { } } if ($type eq 'IN') { - _drop_oldenc(*STDIN, @val); + _drop_oldenc(*STDIN, @val) if $std; $in = join(' ', @val); } elsif ($type eq 'OUT') { - _drop_oldenc(*STDOUT, @val); + if ($std) { + _drop_oldenc(*STDOUT, @val); + _drop_oldenc(*STDERR, @val); + } $out = join(' ', @val); } elsif ($type eq 'IO') { - _drop_oldenc(*STDIN, @val); - _drop_oldenc(*STDOUT, @val); + if ($std) { + _drop_oldenc(*STDIN, @val); + _drop_oldenc(*STDOUT, @val); + _drop_oldenc(*STDERR, @val); + } $in = $out = join(' ', @val); } else { diff --git a/lib/open.t b/lib/open.t index f9cacab8a1..586d8e2c38 100644 --- a/lib/open.t +++ b/lib/open.t @@ -7,7 +7,7 @@ BEGIN { require './test.pl'; } -plan 23; +plan 24; # open::import expects 'open' as its first argument, but it clashes with open() sub import { @@ -195,6 +195,22 @@ SKIP: { "test for an endless loop in PerlIO_find_layer"); } +is runperl( + progs => [ + 'use open q\:encoding(UTF-8)\, q-:std-;', + 'use open q\:encoding(UTF-8)\;', + 'if(($_ = <STDIN>) eq qq-\x{100}\n-) { print qq-stdin ok\n- }', + 'else { print qq-got -, join(q q q, map ord, split//), "\n" }', + 'print STDOUT qq-\x{ff}\n-;', + 'print STDERR qq-\x{ff}\n-;', + ], + stdin => "\xc4\x80\n", + stderr => 1, + ), + "stdin ok\n\xc3\xbf\n\xc3\xbf\n", + "use open without :std does not affect standard handles", +; + END { 1 while unlink "utf8"; 1 while unlink "a"; |