我的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)
您需要做的就是$| = 1在print语句之前添加以强制perl立即输出,而不是缓冲并等待换行.
HANDLE->autoflush( EXPR )$OUTPUT_AUTOFLUSH
$|如果设置为非零,则在当前所选输出通道上的每次写入或打印后立即强制刷新.默认值为0(无论系统是否真正缓冲了通道;
$|仅告诉您在每次写入后是否明确要求Perl进行刷新).如果输出到终端,则STDOUT通常是线路缓冲的,否则阻塞.设置此变量主要在输出到管道或套接字时很有用,例如在rsh下运行Perl程序并希望在输出时看到输出.这对输入缓冲没有影响.请参阅getc.请参阅选择如何选择输出通道.另请参阅IO :: Handle.助记符:当你想要你的管道热管道时.