我有以下Perl代码:

STDOUT->autoflush(1);

foreach(...)
{
    ...

    foreach(...)
    {
        print("Processing $folder");
        $|=1;
        process($folder);
    }
    ...
}

但print语句只能在循环的第一次迭代,并且不打印后的事情。任何想法,为什么?

编辑:我发现的原因,并在答复中加入它也。 将溶液:

  

添加以下线内的   环和它的工作:

     

选择STDOUT;

     

我想在过程中的代码()函数   本来应该修改默认   输出缓冲器。它是一个编写代码   通过别人!

     

我不知道如果这是一个问题   用Perl,其允许该或   开发商谁没有改回来   为默认值。

     

最后的代码看起来是这样的:

foreach(...)
{
    ...

    foreach(...)
    {
        select STDOUT;

        print("Processing $folder");
        $|=1;
        process($folder);
    }
    ...
}
     

由于所有...

有帮助吗?

解决方案

在追查这个问题好侦探的工作!

我想建议的替代的解决方案。

,而不是具有select()的作者process()战争,可以使用 IO ::手柄接口STDOUT:

use IO::Handle;

foreach(...)
{
    ...

    foreach(...)
    {
        STDOUT->printflush("Processing $folder");

        process($folder);
    }
    ...
}

其他提示

我添加循环内的下面的行和它的工作:

select STDOUT;

我想在过程()函数的代码应该已经修改默认输出缓冲器。它是由别人一码!

我不知道这是用Perl的问题,让这个或谁没有改回默认的开发者。

最后的代码看起来是这样的:

foreach(...)
{
    ...

    foreach(...)
    {
        select STDOUT;

        print("Processing $folder");
        $|=1;
        process($folder);
    }
    ...
}

由于所有...

我的代码看起来是这样的:

#!/usr/bin/perl -w

use strict;
use warnings;
use sigtrap qw/handler signal_handler normal-signals/;
use feature qw(say);

my $datetime;
$datetime = localtime ();

say "tester started $datetime";

while ( 1 ) {
    select STDOUT;
    $datetime = localtime ();
    say "tester output every second $datetime";
    $|=1;
    sleep ( 1 );
}

sub signal_handler {
    die "\nCaught a signal $!\n";
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top