Язык программирования Perl



   wrestlingua.com             

Многострочные значения


Есть несколько способов описать в формате данные, занимающие в отчете несколько строк. Если нужно поместить на странице отчета многострочное текстовое значение, то можно воспользоваться поледержателем @*, который просто выведет значение полностью, сохраняя имеющиеся в нем все символы перевода строки, кроме последнего. Например, так делается в этой программе:

format STDOUT = Гамлет: @* $multi_line_text (У. Шекспир) . $multi_line_text = "Быть\nИли не быть?\nВот в чем вопрос."; write STDOUT;

В результате ее выполнения будет выведено известное высказывание с сохранением его разбивки на несколько строк:

Гамлет: Быть Или не быть? Вот в чем вопрос. (У. Шекспир)

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

# выводимое многострочное значение $text = "Что значит имя?\nРоза пахнет розой\n" . "Хоть розой назови ее, хоть нет."; write STDOUT; # описание формата отчета format STDOUT = ^* $text ^* $text ^* ~ $text ^* ~ $text У.Шекспир, "Ромео и Джульетта" .

Обратите внимание, что в формате для вывода значения переменной $text предусмотрены четыре строки. Причем первые две строки отчета (с шаблоном ^*) будут выводиться в любом случае: даже если $text содержит только одну строку текста, вторая строка будет заполнена пробелами. Чтобы не выводить пробельных строк, в описании третьей и четвертой строк указан шаблон подавления пустых строк (одна тильда, ~), который может располагаться в любом месте строки шаблона. После выполнения приведенной программы текст будет выведен в таком виде:




Содержание  Назад  Вперед