Man*_*noj 5 printing perl buffer
我有以下Perl代码:
STDOUT->autoflush(1);
foreach(...)
{
...
foreach(...)
{
print("Processing $folder");
$|=1;
process($folder);
}
...
}
Run Code Online (Sandbox Code Playgroud)
但print语句仅在循环的第一次迭代中起作用,并且在此之后不会打印任何内容.知道为什么吗?
编辑:我找到了原因,并在答案中也添加了它.解决方案是:
我在循环中添加了以下行,它工作正常:
选择STDOUT;
我认为process()函数中的代码应该一直在修改默认的输出缓冲区.这是别人写的代码!
我不确定这是否是Perl的一个问题,它允许这个或没有将其更改回默认值的开发人员.
最终代码如下所示:
Run Code Online (Sandbox Code Playgroud)foreach(...) { ... foreach(...) { select STDOUT; print("Processing $folder"); $|=1; process($folder); } ... }谢谢大家......
dao*_*oad 11
追踪这个问题的好侦探工作!
我想建议一个替代解决方案.
您可以使用ST ::的IO :: Handle接口,而不是select()与作者进行战争:process()
use IO::Handle;
foreach(...)
{
...
foreach(...)
{
STDOUT->printflush("Processing $folder");
process($folder);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我在循环中添加了以下行,它工作正常:
select STDOUT;
Run Code Online (Sandbox Code Playgroud)
我认为process()函数中的代码应该一直在修改默认的输出缓冲区.这是别人写的代码!
我不确定这是否是Perl的一个问题,它允许这个或没有将其更改回默认值的开发人员.
最终代码如下所示:
foreach(...)
{
...
foreach(...)
{
select STDOUT;
print("Processing $folder");
$|=1;
process($folder);
}
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家......
| 归档时间: |
|
| 查看次数: |
13075 次 |
| 最近记录: |