2013-12-22 36 views
2

也許我誤解了編碼等,但每當我在可寫模式下打開表達式時指定編碼時,打印到句柄似乎都沒有效果。在打開時指定編碼時無法寫入

代碼:

my $string = "one\n"; 

#open my $handle, '>>', \$string or die "cannot open: $!"; 
open my $handle, '>>:encoding(UTF-8)', \$string or die "cannot open: $!"; 

print $handle "two\n"; 

print $string; 

輸出:

one 

預期輸出:

one 
two 

可能有人請解釋爲什麼這樣。

感謝,

克里斯

+0

這裏\ $字符串的用法是什麼? –

+1

打開的第三個參數可以是標量引用,如果要將字符串視爲文件,這非常有用。另外,它可能更好地使用IO :: String來代替。 – Chris

回答

5

您從緩衝痛苦。添加

use IO::Handle qw(); 
$handle->autoflush(1); 

或在從緩衝區讀取之前關閉句柄。

+0

謝謝,您的建議都可以解決我的問題。你知道爲什麼這只是指定編碼時的一個問題嗎? – Chris

+2

編碼層可能有其自己的緩衝區。如果沒有:編碼,我不會指望它始終沒有緩衝。 – ikegami

+0

謝謝你的解釋,很大的幫助。 – Chris

相關問題