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


Автор: kahlua 15.6.2010, 12:25
Коллеги. возник непонятный момент, а "нагуглить" .... ничего толкового не получилось.
Суть такая. Есть модуль и для него нужно создать набор тестов. При создание тестов натолкнулся на  новую для себя ситуацию. Ситуация такая - в  одном из тестов я создаю перл-объект, ему доступен ряд методов. При вызове необходимого для меня метода у объекта, открывается STDIN (через вызов функции read ) на который требуется предать xml-ку. Когда запускаю тест в консоли, понятное дело, что тест останавливается когда вызывается функция read... Так вот, каким образом (может есть какая готовая либа) можно "зашарить" открытый дейскритор ввода и в самом тест-кейсе передать в него необходимые данные? Подозреваю, что должне быть готовый модуль с небходимым функционалом :(
Thx!

Автор: dva300 15.6.2010, 13:24
Цитата(kahlua @ 15.6.2010,  12:25)
Коллеги. возник непонятный момент, а "нагуглить" .... ничего толкового не получилось.
Суть такая. Есть модуль и для него нужно создать набор тестов. При создание тестов натолкнулся на  новую для себя ситуацию. Ситуация такая - в  одном из тестов я создаю перл-объект, ему доступен ряд методов. При вызове необходимого для меня метода у объекта, открывается STDIN (через вызов функции read ) на который требуется предать xml-ку. Когда запускаю тест в консоли, понятное дело, что тест останавливается когда вызывается функция read... Так вот, каким образом (может есть какая готовая либа) можно "зашарить" открытый дейскритор ввода и в самом тест-кейсе передать в него необходимые данные? Подозреваю, что должне быть готовый модуль с небходимым функционалом :(
Thx!

возможно я не правильно понял но "зашарить" STDIN можно следующим образом....

Код

use strict;
open(INCOPY,"<&STDIN");
open(STDIN,"<file.txt");
# Прочитает STDIN из файла
print &read_();
close(STDIN);
open(STDIN,"<&INCOPY");
# STDIN обычный 
print &read_();
sub read_
    {
    my $buffer;
    my $bytes = read(STDIN,$buffer,10);
    return "$buffer";
    }

Автор: kahlua 15.6.2010, 13:30
dva300,  да не, как зашарить дескриптор в рамках императивного\процедурного подхода - не проблема.
В моем случае, ситуация иная - когда вызываю у объекта требуемый метод, то последний имеет точку вызова чтения данных через SDTIN. Я пытался "похачить" эту ситуацию, но все одно не получается :(

Автор: arto 15.6.2010, 13:50
ok (open F,"| $^X $path_to_script","run script");
...

Автор: dva300 15.6.2010, 13:50
Цитата(kahlua @ 15.6.2010,  13:30)
dva300,  да не, как зашарить дескриптор в рамках императивного\процедурного подхода - не проблема.
В моем случае, ситуация иная - когда вызываю у объекта требуемый метод, то последний имеет точку вызова чтения данных через SDTIN. Я пытался "похачить" эту ситуацию, но все одно не получается :(

хм... а вы пробовали ? 

Автор: kahlua 15.6.2010, 14:32

Цитата

хм... а вы пробовали ? 


dva300, не, мне просто делать нечего, вот я и решил "помучить знатоков" smile
Конечно пытался :( может не до конца механизм понимаю.  Попытаюсь еще раз в первоисточниках покопаться (Камелбук&Кукбук)

Автор: dva300 15.6.2010, 14:50
Цитата(kahlua @ 15.6.2010,  14:32)
Цитата

хм... а вы пробовали ? 


dva300, не, мне просто делать нечего, вот я и решил "помучить знатоков" smile
Конечно пытался :( может не до конца механизм понимаю.  Попытаюсь еще раз в первоисточниках покопаться (Камелбук&Кукбук)

STDIN всегда был один 

ну или походу мне тоже надо пойти почитать всякого рода буки....

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