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


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


Следующий пример получает число в десятичной, восьмеричной или шестна-дцатеричной системе счисления и выводит его во всех трех системах счисления. Для преобразования из восьмеричной системы используется функция oct. Если введенное число начинается с 0, применяется функция hex. Затем функция printf при выводе преобразует число в десятичную, восьмеричную и шестнадцатерич-ную систему:

print Gimme a number in decimal, octal, or hex  , $num = <STOIN>, chomp $num,

exit unless defined $num,

$num = oct($num) is $num =~ /"0/, # Обрабатывает как восьмеричные,

# так и шестнадцатеричные числа printf %d %x %o\n , $num, $num, $num,

Следующий фрагмент преобразует режимы доступа к файлам UNIX. Режим всегда задается в восьмеричном виде, поэтому вместо hex используется функ­ция oct:

print Enter file permission in octal ',

Spermissions = <STDIN>,

die Exiting  \n unless defined $permissions,

chomp Spermissions,

Spermissions = oct($permissions),  # Режим доступа всегда задается

# в восьмеричной системе print The decimal value is $permissions\n',

О Смотри также------------------------------- .------------------------------------------------------------

Раздел «Scalar Value Constructors» вperldata(l); описание функций oct и hex в perlfunc(l).

2.17. Вывод запятых в числах

Проблема

При выводе числа требуется вывести запятые после соответствующих разрядов. Длинные числа так воспринимаются намного лучше, особенно в отчетах.

Решение

Обратите строку, чтобы перебирать символы в обратном порядке, — это позволит избежать подстановок в дробной части числа. Затем воспользуйтесь регулярным


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

выражением, найдите позиции для запятых и вставьте их с помощью подстанов­ки. Наконец, верните строку к исходному порядку символов.

sub commify {

my $text = reverse $_[0],

$text =" s/(\d\d\d)(?=\d)("\d.\ )/$1 /g,

return scalar reverse $text;

Комментарий

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




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



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