2016-12-26 18 views
3

我一直在試圖從$ * IN中讀取字符,包括控制字符。但是,在輸入Control-D之後,看起來$ * IN變得不起作用。我如何重新打開$ * IN閱讀?

To exit type 'exit' or '^D' 
> my $x=$*IN.getc    # entered "e" 
e 
e 
> say ($x=$*IN.getc).ord  # entered Ctrl-D 
10 
> $x=$*IN.getc    # nothing can be entered now 
(Any) 
> my $y=$*IN.getc 
(Any) 
> 

感謝您的任何幫助。

回答

3

當用戶按下Ctrl-D時自動關閉stdin流,這不是Perl 6在流的接收端所做的事情 - 這是Unix終端驅動程序在末尾執行的操作。因此,在其他所有編程語言中都會遇到同樣的問題。

我不認爲你可以讓終端重新打開標準輸入流,一旦它關閉它。

但是,您可以指示終端暫時禁用自動處理控制字符,如Ctrl + d其默認行爲(所謂的「Cooked mode‘),而是使用’原始模式」,其中EOT字符將除此之外,還可以按照原樣傳遞給您的程序。然後你的程序可以決定如何解釋這個角色。

指示終端進入原始模式的一種方式是termios API,Perl 6綁定由Term::termios模塊提供。 (使用模塊自述文件中演示的.makeraw方法。)

+0

太棒了!謝謝你smls!你一直很有幫助! – lisprogtor

相關問題