2012-02-06 38 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方法一次获取输入一个字符,并抑制新行...