| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > А можно ли короче... |
| Автор: Danissimo 11.12.2006, 15:13 | ||
Мне нужно, чтобы окончание строки было именно CR, LF (13, 10) в независимости от платформы (nix, win). Я добиваюсь этого таким вот образом:
Можно ли как-нть проще? |
| Автор: DiverD 11.12.2006, 16:04 | ||
LF - \012 CR - \015 Еще глянь perldoc Socket и IO::Socket |
| Автор: Nab 11.12.2006, 16:18 | ||
|
| Автор: Danissimo 11.12.2006, 16:36 |
| Nab, а чем отличается твой вариант от вот этого $str =~ s/[^\015]\012/\015\012/g; И второй вопрос: твой вариант, по идее, должен работать и вот с такой строкой $str = "xxx\10yyy\10zzz"; да? Вот, какой результат получается: xx\x0B\x08yy\x0B\x08zzz Видимо, символ \10 все равно вопринимается как закодированный в 8-чной системе. Так что не работает. Добавлено @ 16:43 2DiverD: Спасибо. Я, правда, сначала не понял, что ты хочешь сказать, пока Nab'у не ответил. Ты бы уж попонятнее выражался, тем более что правильные вещи говоришь. |
| Автор: nitr 11.12.2006, 19:43 | ||
| Danissimo, DiverD, вы вообще про что говорили? Nab, очепятался \x.. шестнадцатиричное представление
|
| Автор: Nab 11.12.2006, 20:25 |
| Вообщето, тут символы не так важны, посмотрите на тему топика и сам вопрос... |
| Автор: DiverD 11.12.2006, 22:42 |
| ну сорри =) а что \x10 \x13 тож самое что в 8миричной \012 \015 ? |
| Автор: Danissimo 12.12.2006, 13:11 | ||
Хе-хе, эт я знаю, что \xYY -- 16-чное представление. Я вот тоже, как и Nab, думал, что можно использовать 10-чный коды. Более того, так, как ты, Nitr, предлагаешь, делать нельзя, ибо CR != \x13, так как CR == \x0D (про LF то же самое). И как, опять же, Nab верно заметил, символы тут не при чем. Вопрос -- в названии топика. |
| Автор: Danissimo 29.12.2006, 02:16 | ||
Придумал способ лучше =))
И все! =)) |
| Автор: amg 29.12.2006, 12:02 | ||||||||
Да, это хороший вариант! В три раза быстрее, чем классический
Хотя более сложный вариант ala Nab еще быстрее (в полтора раза)
|
| Автор: Danissimo 30.12.2006, 18:33 |
| О! Правильно я понимаю, что фактическое значение \n зависит от ОС? Другими словами на win* \n = \x0A\x0D, а на *nix \n = \x0A? Я заметил, что chomp по разному работает на *nix и на win*. В первом случае он ест последний \x0D, а во втором -- пару \x0A\x0D. Я вибираю свой, так как он мне кажется лучшим с точки зрения понятности. Но это не мешает мне сказать спасибо, amg, за интересную аналитику. |
| Автор: amg 3.1.2007, 13:28 | ||
Не совсем так. Насколько я понимаю, "\cJ", "\012", "\x0A", chr(10) и "\n" - синонимы и обозначают один символ, который перл интерпретирует как логический конец строки. А физическое воплощение этого конца строки может быть разным и зависит уже не от перла, а от строковой библиотеки ОС, драйвера терминала, сетевых драйверов и т.д. Почитать об этом можно в "Perl Cookbook", во Введении к 8-й главе. |
| Автор: ZeeLax 4.1.2007, 09:53 |
Вот насчёт этих - не знаю не знаю... |
| Автор: amg 4.1.2007, 10:25 | ||
Я не смог придумать ситуацию, когда бы эти записи означали не один и тот же символ. По крайней мере, при выводе на терминал и при записи в файл как в linux, так и в winNT - это синонимы.
|