Форматирование вывода

Иногда стандартных возможностей print по управлению выводом оказывается недостаточно. Многие программисты привыкли форматировать вывод удобной функцией printf в языке C. Не бойтесь: в Perl существует похожая функция с тем же именем. Оператор printf получает форматную строку, за которой следует список выводимых элементов. Форматная строка представляет собой шаблон с описанием желаемой формы вывода:

printf "Hello, %s; your password expires in %d days!\n",
$user, $days_to_die;

Форматная строка содержит так называемые преобразования (conversions). Каждое преобразование начинается со знака процента (%) и завершается буквой. (Как вы вскоре узнаете, между ними могут стоять другие значащие символы.) Количество элементов в списке должно совпадать с количеством преобразований; если они не совпадают, форматный вывод будет работать некорректно. В предыдущем примере задействованы два элемента и два преобразования, поэтому вывод может выглядеть примерно так:

Hello, merlyn; your password expires in 3 days!

Для универсального вывода числа используйте преобразование %g, которое автоматически выбирает наиболее подходящую запись: вещественную, целочисленную или даже экспоненциальную:

printf "%g %g %g\n", 5/2, 51/17, 51 ** 17; # 2.5 3 1.0683e+29

Формат %d обозначает десятичное целое число1, усекаемое по мере надобности:

printf "in %d days!\n", 17.85; # in 17 days!

Обратите внимание: число именно усекается, а не округляется.


О том, как выполняется округление, вы узнаете чуть позже. В Perl функция printf чаще всего используется для вывода столбцовых данных, так как большинство форматов позволяет задать ширину поля. Если данные не помещаются в поле, оно обычно расширяется настолько, насколько потребуется:

printf "%6d\n", 42; # Вывод ````42 (символом ` обозначен пробел)
printf "%2d\n", 2e3 + 1.95; # 2001

Преобразование %s означает строку; фактически заданное значение интерполируется как строка, но с заданной шириной поля:

printf "%10s\n", "wilma"; # `````wilma

При отрицательной ширине поля значение выравнивается по левому краю (во всех преобразованиях):

printf "%-15s\n", "flintstone"; # flintstone`````

Преобразование %f (вещественное) округляет вывод до требуемой точности и даже позволяет задать количество цифр в дробной части:

printf "%12f\n", 6 * 7 + 2/3; # ```42.666667
printf "%12.3f\n", 6 * 7 + 2/3; # ``````42.667
printf "%12.0f\n", 6 * 7 + 2/3; # ``````````43

Чтобы включить знак процента в выводимые данные, используйте запись %%; в отличие от других, она не использует элементы из списка:

printf "Monthly interest rate: %.2f%%\n",
5.25/12; # "0.44%"

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Аргументы вызова
Ввод данных оператором <>
Вывод функцией say
Закрытие файлового дескриптора
Запись данных в стандартный вывод

Вернуться в раздел: Perl / 4. Ввод и вывод