2012-05-04 61 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 

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

相關問題