加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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所说:

A more elegant (and safer) interface is needed.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读