Чтение онлайн

на главную

Жанры

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

Шохирев Михаил Васильевич

Шрифт:

то после выполнения приведенного предложения в переменной $formatted_string будет содержаться такая отформатированная строка:

' Температура' агента <007> = '+36.60 '

Преобразования в формате этого примера обозначают следующее:

[x]. %12s - преобразовать аргумент в строку (string) и поместить в поле шириной в 12 символов с выравниванием вправо (т. к. ширина поля положительная);

[x]. %03d - преобразовать аргумент в десятичное целое (decimal) и поместить в поле шириной в 3 цифры

с ведущими нулями (т. к. ширина поля задана с ведущим нулем) и выравниванием вправо (поскольку ширина положительная);

[x]. %+-10.2f - преобразовать аргумент в дробное число (float) с явным знаком (т.к. указан +) и поместить в поле шириной в 10 цифр, из которых 2 отводятся на дробную часть, с выравниванием влево (поскольку ширина поля отрицательная).

Функция sprintf часто применяется для округления чисел - например, до трех знаков в дробной части:

$rounded = sprintf("%.3f", 7/3); # в $rounded будет 2.333

Полное описание форматов с самыми разными примерами их употребления можно прочитать в официальной документации:

perldoc -f sprintf

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

Иногда требуется работать не со строками и словами текста, а с его отдельными символами. В Perl есть необходимые средства работы с символами, хотя в нем нет специального типа данных, представляющих один символ, подобно типу char в других языках. Один символ из строки можно скопировать функцией substr($string, $index, 1).

С помощью заимствованных из языка Pascal функций ord и chr выполняются преобразования символа (а точнее односимвольной строки) в его ASCII-код и наоборот:

$code = ord($char); # ord('M') вернет число 77

$char = chr($code); # chr(77) вернет строку 'M'

# синоним: $char = sprintf("%c", $code);

Разбить строку на отдельные символы и поместить их в массив можно с помощью уже знакомой функции split с пустой строкой в качестве разделителя:

@array_of_char = split('', $string);

С помощью списков и нескольких вызовов функции substr можно поменять в строке местами символы с указанными индексами, например, 1 и 11:

$s = 'кОт видел кИта';

(substr($s, 1, 1), substr($s, 11, 1)) =

(substr($s, 11, 1), substr($s, 1, 1));

# в $s будет 'кИт видел кОта'

Известная по лекции о списках функция reverse в скалярном контексте возвращает значение текстового выражения, в котором символы переставлены в обратном порядке, например:

$palindrom = 'А РОЗА УПАЛА НА ЛАПУ АЗОРА';

$backwards = reverse($palindrom);

# в $backwards
будет 'АРОЗА УПАЛ АН АЛАПУ АЗОР А'

Обрабатывать отдельные байты, в том числе и символы, можно также при помощи функций pack и unpack, которые предназначены для преобразования любых данных и будут рассмотрены в лекции, посвященной вводу-выводу.

В современном мире уже не работает формула "один символ - это один байт". Необходимость представления текстов, одновременно содержащих символы разных естественных языков, привела к появлению ряда стандартов, часто объединяемых под общим названием Unicode и разработанных международным Консорциумом Unicode. Многочисленные национальные символы языков мира кодируются последовательностями из нескольких байтов. Unicode предлагает несколько форм представления символов в виде форматов преобразования Unicode (Unicode Transformation Format, UTF) и наборов символов Unicode (Unicode Character Set, UCS). Стандарты UCS-2 и UCS-4 представляют из себя кодировки фиксированной длины по два и четыре байта. Из кодировок переменной длины самым популярным стал стандарт UTF-8, использующий для кодирования одного символа от одного до шести байт. Начиная с версии 5.6, Perl поддерживает обработку символов в кодировках Unicode. В Perl применяется кодирование символов последовательностями чисел переменной длины на основе представления UTF-8. Есть возможность записывать многобайтовые (multi-byte) символы в виде литералов, а также выполнять ввод-вывод Unicode-символов.

Для записи в исходной программе символов Unicode в представлении UTF-8 нужно включить обработку строк в этом формате прагмой use utf8. После этого многобайтовые символы могут использоваться наравне с однобайтовыми, например, в качестве ключей в хэшах:

use utf8; # включить поддержку UTF-8

$hash{'

π'} = 3.141592653; # пи (код \x{03C0})

print "$hash{'

π'}\n"; # будет выведено: 3.141592653

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

use utf8;

$скаляр = 25; # имя скаляра на русском

$

∑ = $скаляр + 53; # имя скаляра на греческом

print "$скаляр $

∑\n"; # будет выведено: 25 78

@массив = ($

@Б, $скаляр); # имя массива на русском

print "@массив\n"; # будет выведено: 78 25

Для ввода текста подобной программы понадобится редактор, поддерживающий работу с Unicode. Например, в операционной системе MS Windows это можно сделать с помощью программы Notepad. А в ОС GNU/Linux для редактирования этого текста можно воспользоваться редактором KWrite или Kate. Если такой возможности нет, то символы Unicode можно записывать в программе с помощью escape-последовательностей, о чем было рассказано в лекции 2. Примеры escape-кодов для записи символов Unicode приведены во фрагменте программы далее в этой лекции.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6