PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 93


Функцию нетрудно модифицировать так, чтобы вместо запятых разряды раз­делялись точками, как принято в некоторых странах.

Пример использования функции commify выглядит так:

# Достоверный счетчик обращений    -)

use Math   TrulyRandom,

$hits = truly_random_value(),        # Отрицательное значение1

$output = 'Your web page received $hits accesses last month \n",

print commify($output),

Your  web   page   received   -1,740,525,205   accesses   last   month.

> Смотри также---------------------------------------------------------------------------------------------

perllocale(l); описание функции reverse в perlfunc(l).

2.18. Правильный вывод во множественном числе

Проблема

Требуется вывести фразу типа: "It took $time hours" («Это заняло $time часов»). Однако фраза «It took I hours» («Это заняло 1 часов») не соответствует правилам грамматики. Необходимо исправить ситуацию1.

Решение

Воспользуйтесь printf и тернарным оператором X?Y: Z, чтобы изменить глагол или существительное.

К сожалению, для русского языка этот рецепт не подойдет, поскольку множественное число в нем об­разуется по более сложным правилам с большим количеством исключений. — Примеч перев.


90 Глава 2 • Числа

printf "It took %d hour%s\n", $time, $time == 1 ? "" : "s";

printf "%d hour%s %s enough.\n", $time, $time == 1 ? ""  : "s"; $time == 1 ? "is" : "are";

Кроме того, можно воспользоваться модулем Lingua::EN::Inflect с CPAN, упо­минаемым в комментарии.

Комментарий

Невразумительные сообщения вроде "1 f ile(s) updated" встречаются только из-за того, что автору программы лень проверить, равен ли счетчик 1.

Если образование множественного числа не сводится к простому добавлению суффикса s, измените функцию printf соответствующим образом:

printf "It took %d centur%s", $time, $time == 1 ? "y" : "ies";

В простых ситуациях такой вариант подходит, однако вам быстро надоест пи­сать его снова и снова. Возникает желание написать для него специальную функ­цию:




Начало  Назад  Вперед



Книжный магазин