2012-02-06 56 views
1

我需要清除perl控制檯窗口中的打印值。舉個例子, 注意:我正在Windows操作系統中開發這個。使用perl清除已打印的值

use strict; 

my $mode; 

Initialize(); 

sub Initialize{ 
    print "Enter 1 or 2"; 
    $mode=<STDIN>; 
    chomp($mode); 
    check_mode($mode); 
} 

sub check_mode{ 
    if(($mode!=1) and ($mode!=2)){ 
     print "invalid selection"; 
     Initialize(); 
    } 
    else{ 
     print "valid selection"; 
     sleep 5; 
    } 
} 

在輸入錯誤的選擇時,我調用了Initialize函數,它正在重新打印。但是,我想要的是在調用它應該刪除控制檯窗口中已經打印的值的功能時,它應該再次打印。可能嗎?

請給出您寶貴的建議。

+0

也可能是故意的測試,但你實現'子check_mode' else區塊永遠不會達到?你的'或'應該是'和'。 – ardnew 2012-02-06 21:45:55

+0

@ardnew可能它應該是'和'而不是'或' – run 2012-02-07 05:09:02

+0

是的......我犯了錯誤..感謝您的信息.. – Madhan 2012-02-08 08:13:17

回答

1

特定於窗口操作系統和Linux操作系統

system($^O =~ /win/i ? 'cls' : 'clear'); 
+0

您的正則表達式將匹配'cygwin',它傾向於使用'clear'。 – mob 2012-02-06 15:46:22

2

儘管您可以使用退格字符代碼「\ b」來擦除當前行上的字符,但它具有侷限性,因爲當用戶點擊輸入時,它將打印換行符,並且退格字符不會帶回擦除上一行。

Win32::Console這應該讓你在固定的位置打印您的提示,然後後來改寫了錯誤的選擇,也可以使用InputChar方法一次獲取輸入一個字符,並抑制新行...