Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Передача Hash через STDIN |
Автор: shamber 26.8.2008, 16:37 | ||||||
Здравствуйте, возникла необходимость общаться двум программам с помощью STDIN, STDOUT. Подскажите как передать hash, и получить в другой программе. передаю так
по логике получать должен
но у меня есть проблема. в другой программе STDIN я получаю уже как строку. и Storable пишет , что на входе не GLOB. Как быть? Есть ли что-то типа
? |
Автор: ginnie 26.8.2008, 17:03 |
Уважаемый shamber, попробуйте http://search.cpan.org/~gaas/IO-String-1.08/String.pm. |
Автор: vadiml 26.8.2008, 18:03 |
shamber вы пытаетесь передать указатель на хеш в другую программу, а т.к. у неё своё адресное пространство, то ваш указатель в программе-получателе ничего не значит (да и вообще perl весьма активно зачищает за собой память -- даже если просто указатель сохранить указатель как строку и выйти за пределы блока существования самого объекта, объект моментально уничтожается) переведите хеш в дамп и передайте его как строку, например как указано выше посредством IO::String, а в программе получателе восстановите хеш из дампа. |
Автор: ginnie 26.8.2008, 18:09 |
Уважаемый vadiml, shamber уже использует модуль Storable для сериализации хэша, проблема у него в том, что в другой программе ему необходимо сделать десериализацию, но вместо файлового дескриптора у него там строка, а Storable требует файловый десткриптор. |
Автор: gcc 26.8.2008, 19:06 |
Data::Dumper ? |
Автор: arto 26.8.2008, 20:00 |
# perl -MStorable=store_fd -e 'store_fd { a => 1,b => 2,c => 3 },\*STDOUT' | perl -MStorable=fd_retrieve -MData::Dumper -e 'print Dumper fd_retrieve \*STDIN' $VAR1 = { 'c' => 3, 'a' => 1, 'b' => 2 }; |
Автор: sir_nuf_nuf 26.8.2008, 20:30 |
Если говорим о Storable, то можно использовать freez и thaw для сериализации в строку |
Автор: shamber 26.8.2008, 21:28 |
sir_nuf_nuf, freeze и thaw сериализируют в память, мне казалось(хоть и не проверял), что у разных скриптов разная память. Добавлено @ 21:35 ginnie, спасибо, я думаю это то что нужно. ЗЫ, щас какой-то глюк был и у меня в сообщении ginnie превратилось в [Б]гинние[/Б] |
Автор: sir_nuf_nuf 26.8.2008, 22:30 | ||
shamber, freez сериализует в обычный скаляр. его можно передать через пайп.
З.Ы. Этот глюк включается чекбоксом "Транслит", слева, чуть ниже смайликов =) |
Автор: shamber 28.8.2008, 09:11 |
sir_nuf_nuf, спасибо за предложение. использовал вариант с thaw |