Форматы
Заменим формат 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, как при выводе на экран монитора.