为什么perl会跳过支持while循环的语句

时间:2014-10-13 16:02:03

标签: perl scripting

我的perl脚本似乎跳过if语句并首先执行while循环。如果我取出while循环,我将得到预期的行为(打印一些文本,然后继续)。我没有任何perl经验,所以我想知道这是否是我不了解的语言内部的东西?

$choice = <STDIN>;
chomp($choice);

if($choice == 1)
{
    print 'snap.exe';
    @args = ('snap.exe');
}
elsif($choice == 2)
{
    print 'v2u.exe';
    @args = ('v2u.exe');
}
elsif($choice == 3)
{
    print 'ImageMagick';
    @args = ('import','-depth','8','-window');
}

while(1)
{
    #dostuff
}

1 个答案:

答案 0 :(得分:5)

You're suffering from buffering

您需要做的就是在打印语句之前添加$| = 1以强制perl立即输出,而不是缓冲并等待换行。

来自perlvar $OUTPUT_AUTOFLUSH

  
      
  • HANDLE->autoflush( EXPR )
  •   
  • $OUTPUT_AUTOFLUSH
  •   
  • $|

         

    如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新。默认值为0(无论系统是否真正缓冲了通道; $|仅告诉您在每次写入后是否已明确要求Perl进行刷新)。如果输出到终端,则STDOUT通常是线路缓冲的,否则阻塞。设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望在输出时看到输出。这对输入缓冲没有影响。请参阅getc。有关如何选择输出通道的信息,请参阅select。另请参阅IO::Handle

         

    助记符:当你想让你的管道发烫时。

  •   
相关问题