为什么perl跳过stations而使用while循环

为什么perl跳过stations而使用while循环,perl,scripting,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.e

我的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
}

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

发件人:

句柄->自动刷新EXPR $OUTPUT\u自动刷新 $|

如果设置为非零,则在当前所选输出通道上的每次写入或打印之后立即强制刷新。无论系统是否真的缓冲了通道,默认值为0;$|只告诉您是否已在每次写入后显式要求Perl刷新。如果输出到终端,则标准输出通常为行缓冲,否则为块缓冲。设置此变量主要在输出到管道或套接字时有用,例如在rsh下运行Perl程序并希望在输出发生时查看输出时。这对输入缓冲没有影响。看看吧。有关如何选择输出通道的信息,请参见。另见

助记符:当你希望你的管道是滚烫的

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

发件人:

句柄->自动刷新EXPR $OUTPUT\u自动刷新 $|

如果设置为非零,则在当前所选输出通道上的每次写入或打印之后立即强制刷新。无论系统是否真的缓冲了通道,默认值为0;$|只告诉您是否已在每次写入后显式要求Perl刷新。如果输出到终端,则标准输出通常为行缓冲,否则为块缓冲。设置此变量主要在输出到管道或套接字时有用,例如在rsh下运行Perl程序并希望在输出发生时查看输出时。这对输入缓冲没有影响。看看吧。有关如何选择输出通道的信息,请参见。另见

助记符:当你希望你的管道是滚烫的


你确定这不是缓冲的问题吗?如果在整个if-elsif分支前面加上$|=1;,会发生什么;?正在缓冲输出:print snap.exe\n;强迫output@raina77ow抱歉,我的perl知识还不太好,甚至还没有开始了解您在说什么:为什么不在第一个if之前打印$choice,看看您是否拥有您认为拥有的东西?您确定这不是缓冲的问题吗?如果在整个if-elsif分支前面加上$|=1;,会发生什么;?正在缓冲输出:print snap.exe\n;强迫output@raina77ow抱歉,我的perl知识还不太好,甚至还没开始了解您在说什么:为什么不在第一个if之前打印$choice,看看您是否拥有您认为拥有的东西?