为什么perl会跳过有利于while循环的语句

ins*_*ion 0 scripting perl

我的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
}
Run Code Online (Sandbox Code Playgroud)

Mil*_*ler 5

你正在遭受缓冲.

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

perlvar $ OUTPUT_AUTOFLUSH:

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

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

    助记符:当你想要你的管道热管道时.