Иллюстрированный самоучитель по Perl

Форматы

Заменим формат STDOUT программы примера 8.1 на следующий:

format STDOUT =
-<"""""""""""" | @"""">" | @||||||| | @##it f @###.##р.
$author, $title, $pub, $year, $price
^ """"""""""<"" | | I | ~
$author

Теперь вывод нашей программы будет выглядеть так:

В.Долженков Ю.Колесников I Excel 2000 | BHV | 1999 | 90.00р.
А.Матросов А.Сергеев | ' HTML 4.О Г BHV | 1999 | 70.00р.
М.Чаунин I I II
Т.Кристиансен Н.Торкингтон I Perl | Питер | 20.00 | 100.00р.

Символ тильда "~" в конце строки Шаблона подавляет вывод пустых строк. Если не поставить его, то между первой и второй книгой в нашем отчете появится дополнительная строка, как если бы была выведена вторая строка шаблона с пустым значением переменной $author. Символ подавления вывода пустых строк можно задавать в любом месте строки шаблона, помня, что при выводе он отображается, как пробел.

В нашем примере мы знали, что данные в переменной $author не займут более двух строк при выводе. Поэтому в формате мы использовали эту информацию, добавив еще одну строку шаблона с переменной $author. А что делать, если не известно количество строк продолжения в которых будут выводиться данные? Можно воспользоваться двумя идущими подряд символами тильда вместо одного. В этом случае алгоритм буферизации данных по словам будет продолжаться до завершения вывода всех данных переменной. Если наш формат изменить на следующий:

format STDOUT =. _….,..,….;,
^<"""""""""""" | @"""">",| @| | | | || | | в#### I @###.-##р.
$author, $title, $pub, $year, $price
$author

…а во вторую книгу добавить еще парочку авторов, то вывод записи об этой книге нашей программой будет иметь следующий вид:

А.Матросов А.Сергеев | HTML 4.0 I BHV | 1999 | 70.00р.
М.Чаунин В.Долженков I III
Ю.Колесников I III

Таким способом можно организовать вывод длинных данных в вертикальные текстовые блоки с переносом по словам.

Немного отвлечемся от создания отчета по книгам, чтобы познакомить читателя с еще одним символом форматирования – символом "*", который позволяет выводить длинные строковые данные в нескольких строках, длина которых равна максимальной ширине вывода устройства отображения (экрана монитора или принтера). Например, если переменная $ record содержит строковые данные длиной более 80 символов и вывод осуществляется на экран монитора, то следующий фрагмент кода Perl:

write;
format STDOUT =
$*
$record

…отобразит на экране ее содержимое следующим образом:

В.Долженков Ю.Колесников:Excel 2000:BHV:1999:90:
Книга является справочным пособием по MS Excel 2000.
В ней рассматриваются следующие основные темы – настройка интерфейса и его основные элементы.

Замечание
Используемый в нашей книге шрифт для представления вывода сценария Perl не позволяет нам отобразить истинный вывод в соответствии с заданным форматом, так как внимательный читатель обнаружит, что длина строки вывода в нашем представлении составляет 73 символа, а не 80, как при выводе на экран монитора
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.