Perl использует шаблон письма, называемый «формат», для вывода отчетов. Чтобы использовать функцию форматирования Perl, вы должны сначала определить формат, а затем вы можете использовать этот формат для записи отформатированных данных.
Определить формат
Ниже приведен синтаксис для определения формата Perl:
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
Здесь FormatName представляет название формата. Поле представляет собой определенный способ, данные должны быть отформатированы. Строки значений представляют значения, которые будут введены в строку поля. Вы заканчиваете формат с одним периодом.
Следующая полевая строка может содержать любой текст или держатели полей. Владельцы полей содержат место для данных, которые будут размещены там позже. Полевой держатель имеет формат —
@<<<<
Этот держатель поля выровнен по левому краю с пробелом поля 5. Вы должны посчитать знак @ и знак <, чтобы узнать количество пробелов в поле. Другие владельцы поля включают в себя —
@>>>> right-justified @|||| centered @####.## numeric field holder @* multiline field holder
Примерный формат будет —
format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== .
В этом примере $ name будет записано как выравнивание по левому краю в пределах 22 пробелов, а после этого возраста будет записано в двух пробелах.
Использование формата
Чтобы вызвать это объявление формата, мы использовали бы ключевое слово write —
write EMPLOYEE;
Проблема заключается в том, что именем формата обычно является имя дескриптора открытого файла, и оператор write отправит выходные данные в этот дескриптор файла. Поскольку мы хотим, чтобы данные отправлялись в STDOUT, мы должны связать EMPLOYEE с дескриптором файла STDOUT. Сначала, однако, мы должны убедиться, что STDOUT — наш дескриптор выбранного файла, используя функцию select ().
select(STDOUT);
Затем мы связали бы EMPLOYEE с STDOUT, установив имя нового формата с STDOUT, используя специальную переменную $ ~ или $ FORMAT_NAME следующим образом:
$~ = "EMPLOYEE";
Когда мы сейчас делаем write (), данные будут отправлены в STDOUT. Помните: если вы собираетесь написать свой отчет в любом другом дескрипторе файла вместо STDOUT, тогда вы можете использовать функцию select (), чтобы выбрать этот дескриптор файла, а остальная логика останется прежней.
Давайте возьмем следующий пример. Здесь у нас есть жестко закодированные значения только для демонстрации использования. При фактическом использовании вы будете считывать значения из файла или базы данных для создания реальных отчетов, и вам может потребоваться снова записать окончательный отчет в файл.
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . select(STDOUT); $~ = EMPLOYEE; @n = ("Ali", "Raza", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n) { $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
При выполнении это даст следующий результат —
=================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Определить заголовок отчета
Все выглядит хорошо. Но вам будет интересно добавить заголовок в ваш отчет. Этот заголовок будет напечатан в верхней части каждой страницы. Это очень просто сделать. Помимо определения шаблона вам нужно будет определить заголовок и назначить его переменной $ ^ или $ FORMAT_TOP_NAME —
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . format EMPLOYEE_TOP = =================================== Name Age =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "Raza", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n) { $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
Теперь ваш отчет будет выглядеть так:
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Определить пагинацию
Что делать, если ваш отчет занимает более одной страницы? У вас есть решение для этого, просто используйте $% или $ FORMAT_PAGE_NUMBER vairable вместе с заголовком следующим образом:
format EMPLOYEE_TOP = =================================== Name Age Page @< $% =================================== .
Теперь ваш вывод будет выглядеть следующим образом —
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== Raza 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Количество строк на странице
Вы можете установить количество строк на странице, используя специальную переменную $ = (или $ FORMAT_LINES_PER_PAGE), по умолчанию $ = будет 60.
Определить нижний колонтитул отчета
Хотя $ ^ или $ FORMAT_TOP_NAME содержит имя текущего формата заголовка, не существует соответствующего механизма, который автоматически делал бы то же самое для нижнего колонтитула. Если у вас есть нижний колонтитул фиксированного размера, вы можете получить нижние колонтитулы, проверяя переменную $ — или $ FORMAT_LINES_LEFT перед каждой записью () и, при необходимости, печатать нижний колонтитул самостоятельно, используя другой формат, определенный следующим образом:
format EMPLOYEE_BOTTOM = End of Page @< $% .
Полный набор переменных, связанных с форматированием, см. В разделе « Специальные переменные Perl ».