use warnings; use strict; use IO::Handle; use Data::Dumper; local $Data::Dumper::Terse = 1; local $Data::Dumper::Indent = 0; binmode *STDIN, ":encoding(UTF-8)"; my $FH_fileno = IO::Handle->new; $FH_fileno->fdopen(fileno(STDIN), "r") or die $!; my $FH = IO::Handle->new; $FH->fdopen(*STDIN, "r") or die $!; print "*STDIN = ", Dumper([ PerlIO::get_layers(*STDIN) ]), "\n"; print "fdopen fileno = ", Dumper([ PerlIO::get_layers($FH_fileno) ]), "\n"; print "fdopen STDIN = ", Dumper([ PerlIO::get_layers($FH) ]), "\n"; __END__ *STDIN = ['unix','perlio','encoding(utf-8-strict)','utf8'] fdopen fileno = ['unix','perlio'] fdopen STDIN = ['unix','perlio','encoding(utf-8-strict)','utf8']