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


Автор: ssdm 24.8.2010, 18:14
Привет.
При конвейерной обработке двух программ, поток вывода первой команды передается в поток ввода второй команды.
Но как быть если первая команда ничего не вернула ? Или вообще вызвана не была? В этом случае программа номер два останавливается и ждет ввода с клавиатуры.
Вот пример :
Код

 my $st=<STDIN>;
    for (split(/\\n/,$st)){
        chomp;
        my $str=$_;
        push @prev_objs,$self->do_somth($str);     
    } 

Как можно обойти эту проблему ?

Автор: arto 24.8.2010, 19:06
1. вернет undef
2. exit if (-t STDIN) 

Автор: ssdm 24.8.2010, 19:23
Цитата(arto @  24.8.2010,  19:06 Найти цитируемый пост)
1. вернет undef

в том то и дело что undef не возвращает.. просто ждет ввода символа..

exit if (-t STDIN)  - завтра попробую

Автор: arto 24.8.2010, 20:51
# false | perl -le '$a = <STDIN> || "none"; print $a;'
none
# 

Автор: ssdm 25.8.2010, 10:21
Цитата(arto @  24.8.2010,  20:51 Найти цитируемый пост)
false | perl -le '$a = <STDIN> || "none"; print $a;'

да.. тут все  правильно , а если первая команда вызвана не была ? 
то есть perl -le '$a = <STDIN> || "none"; print $a;
тогда ждем ввода символов

add: Все. Разобрался. Просто надо юзать unless (-t STDIN). 
Спасибо за помощь!

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