题
我有以下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";
}
不隶属于 StackOverflow