2012-05-04 36 views
0

是否有可能恢复STDIN的原始编码,哪种编码先前被修改?是否可以将编码恢复到修改的STDIN?

#!/usr/bin/env perl 
use warnings; 
use strict; 

binmode STDIN, ':raw'; 

# do something here 
# ... 
# ... 

# restore original STDIN encoding 
binmode STDIN, $old_encoding; 
+0

不是。对于初学者来说,每一层都可以有一个缓冲区,所以你实际上可以通过临时移除图层来丢失数据。 – ikegami

回答

1

不知道这是否会工作,但存在:pop pseudo-encoding说:

删除最顶层。为perl代码提供了一种操作图层堆栈的方法。应该被认为是实验性的。请注意:pop仅适用于真正的图层,并且不会撤消伪层的效果,如:utf8。一个可能的使用的一个例子可能是:需要

open($fh,...) 
... 
binmode($fh,":encoding(...)"); # next chunk is encoded 
... 
binmode($fh,":pop");   # back to un-encoded 

更优雅(和更安全的)接口。

相关问题