Проблема Perl format () - пустые строки между абзацами удаляются и не могут быть отображены - PullRequest
0 голосов
/ 09 апреля 2011

Я использую функции Perl format и write для вывода некоторого текста.

Требования приведены ниже:

  1. Печать статьи (длина неизвестна) с использованием Perl format.
  2. Максимум 80 символов в строке.
  3. Последнее слово должно быть перенесено на следующую строку, если недостаточно места.
  4. Необходимо сохранить пустые строки между абзацами.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что пустые строки между абзацами не могут быть отображены.Я проверил, и это, кажется, вызвано использованием "~~".

Формат определяется следующим образом.

format FULL_TEXT =
Full Story:
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
$storyBody
.

Есть ли способ напечатать эту пустую строкумежду пунктами, в то же время все еще отвечая другим требованиям?

Например, ниже я ожидаю.Однако, как я уже говорил, пустая строка между двумя абзацами убирается и не может быть отображена.

COLLINGWOOD развернул свой флаг премьерства 2010 года на MCG вчера вечером и отметил событие как протокол, требуемыйпонизив яркость своего самого выдающегося соперника, Карлтона в эпическом по стилю соревновании, если не в следствии.клубы.Старое чувство шевелится в AFL.

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Хитрость заключается в том, чтобы разбить текст на абзацы и написать каждый абзац за раз.

use strict;
use warnings;
# slurp text
my $text = do { local $/; <> };
# split into paragraphs
my @paragraphs = split /\n+/, $text;
# define format, including newline at the end
format STDOUT =
  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$_
  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_

.
# write text to format
write for @paragraphs;

Назовите это так:

perl /tmp/fmt.pl < /tmp/article.txt

Если вы хотите или должны сэкономить память, потому что ваши статьи такие большие, вы можете объединить первые два шага:

use strict;
use warnings;
# slurp text into paragraphs
my @paragraphs = split /\n+/, do { local $/; <> };
# define format, including newline at the end
format STDOUT =
  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$_
  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_

.
write for @paragraphs; # write text to format
1 голос
/ 09 апреля 2011
use 5;
use strictures;
use Perl6::Form;

my $storyBody = 'COLLINGWOOD unfurled its 2010 premiership flag at the MCG last night and marked the occasion as protocol demanded, by lowering the colours of its longeststanding rival, Carlton in a contest that was epic in style, if not consequence.

The crowd was 88,181, a record for home-and-away contests between these clubs. An old feeling stirring in the AFL.';

my $form = form
'Full Story:',
'{[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[}',
map {s/\n/\r\r/; $_} $storyBody;

print $form;

Вывод:

Full Story:
COLLINGWOOD unfurled its 2010 premiership flag at the MCG last night and marked
the occasion as protocol demanded, by lowering the colours of its longeststanding
rival, Carlton in a contest that was epic in style, if not consequence.

The crowd was 88,181, a record for home-and-away contests between these clubs. An
old feeling stirring in the AFL.

Семантика \r в форме (?: At)? S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...