Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Замена символа Конца строки |
Автор: shamber 1.9.2008, 16:41 | ||||||||
Всем здравствуйте. Возникла следующая проблемка. мне неоходимо передавать hash, через STDIN. как мы уже http://forum.vingrad.ru/forum/topic-225742.html для этой задачи прекрасно Storable freeze и thaw так вот возникла следующая проблема. чтение данных происходит следующим образом
Данные я передаю таким образом, чтобы $buffer->[0] наименование команды; $buffer->[1] данные полученные с помощью freeze; Но если после преобразования с помощью freeze в строке будет содержаться символ перевода строки(надеюсь правильно его назвал \n) то данные лягут также и в $buffer->[2], чего-бы мне не хотелось. вообщем я решил использовать такой фокус перед отправкой заменять
а при приеме назад восстанавливать. Но проблема в том, что это почему-то не всегда срабатывает. В прикрепленом файле номер 1 содержится hash, записанный через store. т.е.
Во втором файле находится находятся данные полученные с помощью
Как видно в обоих файлах есть перевод строки Как доработать регулярку? |
Автор: shamber 1.9.2008, 16:41 |
Так и не понял как прикрепить второй файл в одно сообщение |
Автор: ginnie 1.9.2008, 17:34 |
Уважаемый shamber, почему не вставить команду внутрь хэша? |
Автор: shamber 1.9.2008, 17:45 |
Уважаемый ginnie,прошу прощения я не совсем понял ваш вопрос. Что вы имеете ввиду? |
Автор: ginnie 1.9.2008, 18:01 |
Я подумал, что лучше обойтись без замены символов конца строки, поэтому предложил поместить значение $buffer->[0] внутрь хэша. При этом читать данные из потока целиком. Похоже, что я был не прав, т.к. не учел, что могут передаваться несколько сериализованных хэшей. |
Автор: ginnie 1.9.2008, 18:12 |
До сериализации на стороне отправителя добавлять в хэш ключ c уникальным (для хэша) именем и значением, которое вы передаете перед сериализованным хэшем в Вашем варианте. |
Автор: Bulat 2.9.2008, 13:04 | ||||
shamber, что касается изменения регулярного выражения - два существенных вопроса, как правило символ перевода каретки - \r, не присутствует в файлах созданных под никсовой платформой(под FreeBSD точно), т.е. в зависимости от операционной системы, нужно правильно обрезать символ конца строки. И во-вторых, зачем между \r и \n знак вопроса?? Как правило, лично мне, для того чтобы убрать "конец строки" пока достаточно было лишь
В твоем случае, очевидно
![]() |
Автор: KSURi 2.9.2008, 22:41 |
Bulat, ? как раз обеспечивает кросс-платформенность в данном случае (хотя еще лучше заменить \r и \n на \015 и \012 соответственно). \r?\n можно прочитать как "один необязательный символ возврата каретки (ноль или один) и один символ перевода строки" |
Автор: shamber 3.9.2008, 09:16 | ||
KSURi, я правильно понял,что лучше
|
Автор: KSURi 3.9.2008, 11:07 |
Ага. Почитать про это можно http://theoryx5.uwinnipeg.ca/CPAN/perl/pod/perlipc/internet_line_terminators.html |
Автор: Bulat 3.9.2008, 14:45 |
Это я потом понял, но сколько лично я не работал, мне всегда было достаточно [\r\n] ![]() |
Автор: gcc 3.9.2008, 16:49 | ||
|