【问题标题】:Clear already printed values using perl使用 perl 清除已打印的值
【发布时间】:2012-02-06 07:42:28
【问题描述】:

我需要清除 perl 控制台窗口中的打印值。例如, 注意:我正在 Windows 操作系统中开发它。

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;
   }
}

在输入错误选择时,我调用了初始化函数,它再次打印。但是,我想要的是在调用函数时它应该删除控制台窗口中已经打印的值,并且应该再次打印。有可能吗?

请提出您宝贵的建议。

【问题讨论】:

  • 这可能是有意的测试,但你知道sub check_mode 中的else-block 永远不会到达吗?你的or 应该是and。
  • @ardnew 不错,应该是and 而不是or
  • 是的...我弄错了...谢谢您的信息..

标签: perl


【解决方案1】:

虽然您可以使用退格字符代码“\b”来擦除当前行上的字符,但它有一定的局限性,因为当用户按 Enter 键时,它会打印一个换行符,并且您的退格字符不会带回以擦除当前行上的字符上一行。

请参阅Win32::Console,它应该允许您在固定位置打印提示,然后覆盖错误的选择,或者您可以使用 InputChar 方法一次输入一个字符并禁止换行...

【讨论】:

    【解决方案2】:

    特定于window os和linux os

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

    【讨论】:

    • 您的正则表达式将匹配cygwin,后者更愿意使用clear。
    猜你喜欢
    • 2018-04-25
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2011-10-05
    • 2022-06-27
    • 2014-11-20
    相关资源
    最近更新 更多