Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Перенаправление STDOUT


Автор: KSURi 4.6.2008, 14:52
Код

open my $in, $target or die $!;
tie *STDOUT, 'IO::Scalar', \my $stdout; # Перенаправляем STDOUT в скаляр
$stdout = do {local$/=undef;<$in>}; # Считываем входной файл
close $in;

my $perl = IO::File->new;
while(1) {
    # ... некоторый манипуляции с содержимым $stdout
    $perl->open('|perl'); # pipe к интерпретатору
    print $perl $stdout; # 
    $perl->close;
}

Вывод кода который я посылаю в pipe попадает в реальный STDOUT, а не в нужный мне скаляр.
Почему?

ЗЫ: $^O eq 'MSWin32'
ЗЗЫ: вместо IO::File/Scalar пробовал обычные open, ничего не изменилось

Автор: ginnie 4.6.2008, 15:02
KSURi, не могли бы Вы пояснить, что по Вашему должно быть и что работает не так?

Автор: KSURi 4.6.2008, 15:25
Я расчитывал на то, что вывод из пайпа, при его закрытии, попадет в $stdout, а не в оригинальный STDOUT

Автор: ginnie 4.6.2008, 15:36
KSURi, как по-вашему, другой процесс может записать данные в родительскую переменную?

Автор: KSURi 4.6.2008, 16:41
Действительно... Даже не подумал об этом... Стыдно(
Буду юзать файлы. Вопрос закрыт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)