perl – 我应该在每个binmode之后弹出吗?
发布时间:2020-12-15 23:36:58 所属栏目:大数据 来源:网络整理
导读:使用binmode时,我应该从可能以前使用过的binmode中弹出图层吗? #!/usr/bin/env perluse warnings;use 5.012; use autodie;open my $tty,':encoding(utf8)','/dev/tty'; # ...close $tty;open $tty,':encoding(latin1)','/dev/tty'; # ...close $tty;open $t
使用binmode时,我应该从可能以前使用过的binmode中弹出图层吗?
#!/usr/bin/env perl use warnings; use 5.012; use autodie; open my $tty,'>:encoding(utf8)','/dev/tty'; # ... close $tty; open $tty,'>:encoding(latin1)','/dev/tty'; # ... close $tty; open $tty,'>:bytes','/dev/tty'; say "@{[ PerlIO::get_layers( $tty ) ]}"; # unix perlio close $tty; say "----------------------------------------"; binmode STDOUT,':encoding(utf8)'; # ... binmode STDOUT,':encoding(latin1)'; # ... binmode STDOUT,':encoding(latin1)'; # ... binmode STDOUT,':bytes'; say "@{[ PerlIO::get_layers( *STDOUT ) ]}"; # unix perlio encoding(utf8) / # utf8 encoding(iso-8859-1) utf8 encoding(utf8) utf8 encoding(iso-8859-1) binmode STDOUT,':pop:pop:pop:pop:bytes'; say "@{[ PerlIO::get_layers( *STDOUT ) ]}"; # unix perlio . #!/usr/bin/env perl use warnings; use 5.012; use autodie; open my $tty,'>:raw','/dev/tty'; say "@{[ PerlIO::get_layers( $tty ) ]}"; # unix close $tty; say "----------------------------------------"; binmode STDOUT,':encoding(utf8)'; # ... binmode STDOUT,':raw'; say "@{[ PerlIO::get_layers( *STDOUT ) ]}"; # unix perlio binmode STDOUT,':pop:raw'; say "@{[ PerlIO::get_layers( *STDOUT ) ]}"; # unix 解决方法
:pop需要弹出真实图层,例如:encoding(…).所以是的,如果你想用另一个替换真实的图层,那么你必须:pop.
但请注意,推送:raw实际上会产生一系列pop …而且:perlio会自动插入:unix下面.所以pop的确切数量实际上取决于当前的层数. 正如documentation所说:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |