Почему я получаю перерывы линейки на веб-странице, я загружаю с Perl?

StackOverflow https://stackoverflow.com/questions/3934065

Вопрос

Я пишу простой сценарий Perl (в Windows), чтобы загрузить ответ запроса получения URL в файл. Довольно прямо вперед. За исключением случаев, когда он пишет в выходной файл, я получаю перерывы линейки. Так нравится вместо:

<head>
  <title>title</title>
  <link .../>
</head>

я получил

<head>

  <title>title</title>

  <link .../>

</head>

Вот сценарий Perl:

use LWP::Simple;

my $url = $ARGV[0];
my $content = get($url);

open(outputFile, '+>', $ARGV[1]);

print outputFile $content;

close(outputFile);

Я полагаю, я мог бы просто получить wget для окон, но теперь это беспокоит меня. Как мне избавиться от этих линейных перерывов?!

Это было полезно?

Решение

  1. Там нет вменяемой причины для >+ Режим в вашем примере кода. Просто говорю.
  2. LWP::Simple имеет getstore метод. Если вы используете LWP::Simple, Почему бы не использовать это?
  3. По умолчанию открыть открыть :crlf Слой ввода / вывода при работе на Win32, который поворачивается \n в \r\n. Отказ Но данные, которые вы пишете уже имеют \r\n, Так что вы заканчиваете слишком много новых линий. Если вы хотите, чтобы данные были написаны Verbatim, вы должны использовать binmode, или открыть ручку с :raw начать с. LWP уже делает это правильно.

Другие советы

Я предполагаю это $content Уже включает в себя CRLF Newlines и слой IO Perl выполняет преобразование LF -> CRLF. (Внутренне, « N» - это один символ в Perl, обычно LF). Я бы добавил

binmode(outputFile);

после open отключить это преобразование и запись результатов $content напрямую.

Comp ($ Content) будет мое предположение. Как выглядит так, будто в нем набор N в этом.

Редактировать: Извините, я только что понял, что Chomp не будет работать, если вы не разделите файл в строки, затем Comp Comp в каждой строке, так как Chomp будет только Comp конец входной строки, мое решение не помогло бы в этом случае, однако , вы могли бы разделить его на n N, а затем присоединяйтесь? Мне нравится решение использовать регулярное выражение на строке, возвращенной в ответ ниже. Однако для меня незначительная модификация: включая некоторые дополнительные изменения, поэтому оно все еще отделяет линии, но он проверит либо 2+ N, либо 2+ R's или любая комбинация двух. Тогда возвращая n в это место, таким образом, у него будет только одна новая строка в строке (надеюсь)

$ CONTENT = ~ S / [ N R] + / N / G;

Образовано выше снова, случайно положил! Там по какой-то причине .... не уверен, почему

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top