2014-01-28 1 views
0

Я работал над скриптом, когда вдруг понял, что не могу записать файл.Запись в filehandle не будет работать со сном

Я был в состоянии получить его в этом битый коде:

use strict; 
use warnings; 

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

while(1){ 
    sleep 1; 
} 

Я попытался взлетаю буферную установку $ | = 1.

Я работаю над программой, которая работает и делает что-то каждые 10 минут, поэтому я использую сон, чтобы подождать 10 минут.

ответ

3

Если вы не установили $| в 1, а $out был выбран, вы ничего не сделали.

Если Perl не является древним, писать

$out->autoflush(1); 

Если Perl древний, написать

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

благодаря этой работы (древняя версия)! Принят через пару минут. Итак, $ | только снимает буферизацию для stdout? если не выбран новый дескриптор файла? – Gabs00

+0

@ Gabs00 это правильно. – hobbs

+1

В древние времена 'use IO :: Handle; $ out-> autoflush (1); 'работает тоже; в еще более древние времена, s/IO :: Handle/FileHandle/ – ysth

Смежные вопросы