【问题标题】:Writing to filehandle won't work with sleep写入文件句柄不适用于睡眠
【发布时间】:2014-02-19 05:14:14
【问题描述】:

当我突然意识到我无法写入文件时,我正在编写脚本。

我已经能够把它归结为这段代码:

use strict;
use warnings;

open(my $out, '>>', 'log.txt') or die "$!";
print $out "test";

while(1){
    sleep 1;
}

我尝试通过设置 $| 来取消缓冲= 1。

我正在开发一个每 10 分钟运行一次的程序,所以我使用 sleep 来等待 10 分钟。

【问题讨论】:

    标签: perl while-loop sleep filehandle


    【解决方案1】:

    除非您在选择 $out 时将 $| 设置为 1,否则您不会执行任何操作。

    如果你的 perl 不是古代的,写

    $out->autoflush(1);
    

    如果你的 perl 是古老的,写

    my $prev = select($out);
    $| = 1;
    select($prev);
    

    【讨论】:

    • 感谢这个工作(古代版本)!将在几分钟内接受。所以$|那么只为标准输出取消缓冲呢?除非选择了新的文件句柄?
    • 在古代,use IO::Handle; $out->autoflush(1);也有效;在更古老的时代,s/IO::Handle/FileHandle/
    • @ysth 非常正确,但我的记忆力不够好,无法保持正常时的效果,所以我回退到 5.000(或更低)版本:)
    • $| 是仅影响当前选定或最后输入文件句柄的几个变量之一
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多