Михаил Шохирев - Язык программирования Perl
- Название:Язык программирования Perl
- Автор:
- Жанр:
- Издательство:Интернет-университет информационных технологий - ИНТУИТ.ру
- Год:2006
- Город:M.
- ISBN:5-94774-604-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Михаил Шохирев - Язык программирования Perl краткое содержание
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Расчитанный на полугодовое изучение, курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Язык программирования Perl - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
$format = "'%12s' агента = '%+-10.2f'"; @list = ('Температура', 7, 36.6); $formatted_string = sprintf($format, @list);
то после выполнения приведенного предложения в переменной $formatted_string будет содержаться такая отформатированная строка:
' Температура' агента = '+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{' = $скаляр + 53; # имя скаляра на греческом print "$скаляр $ '; # коды \x{221E}, \x{2260}, \x{221E} print "Бесконечности не равны\n" if $u eq reverse '???';
Переключить встроенные функции на работу не с символами, а с байтами можно с помощью прагмы use bytes . Снова переключиться на работу функций не с байтами, а с символами можно с помощью прагмы no bytes . Подключив прагмой use Encode стандартный модуль преобразования можно преобразовать обычную строку в строку символов Unicode с помощью функции encode() , возвращающей символьную строку в представлении UTF-8. Обратное преобразование выполняет функция decode() :
use Encode; my $cp1251 = 'Привет!'; # строка в кодировке UTF-8 my $utf8 = encode('utf8', $cp1251); # преобразуется в UTF-8 my $win_ru = decode('utf8', $utf8); # и наоборот
Поддержка наборов символов Unicode в Perl имеет свои особенности, связанные с обеспечением совместимости со старыми байт-ориентированными программами, но эти особенности заслуживают отдельного продолжительного разговора за рамками данного учебного курса.
В этой лекции рассмотрены средства работы с символьной информацией в Perl, достаточные для решения типичных задач обработки текста. Но вся прелесть языка Perl и его мощь открываются только тем, кто освоит регулярные выражения, о которых пойдет речь в следующей лекции.
Лекция 8. Регулярные выражения
В этой лекции будет кратко рассказано о мощном средстве обработки текста - регулярных выражениях, эффективной поддержкой которых всегда славился язык Perl. Регулярные выражения - это отдельный язык для работы с текстовой информацией, который встроен в язык Perl так, что пользоваться ими можно легко и удобно.
Цель лекции: познакомиться с правилами описания регулярных выражений и со средствами работы с ними в Perl. Научиться применять регулярные выражения для поиска, извлечения и замены текстовой информации.
Когда некоторые говорят, что программы на Perl похожи на бессмысленную кучу символьного мусора, то это впечатление, скорее всего, возникло от вида какого-нибудь длинного регулярного выражения, а они действительно могут выглядеть как загадочный или бессмысленный набор символов, например:
m/]+?HREF\s*=\s*["']?([^'" >]+?)['"]?\s*>/ig
(Это всего-навсего шаблон для поиска гиперссылок в HTML-странице.) Но в этой лекции вы узнаете, что регулярные выражения - совсем не ужасные и отнюдь не хаотичные, а наоборот, очень даже логичные и упорядоченные, что употреблять их не так уж сложно, а записывать их можно вполне наглядным способом. Как сказал Джеффри Фридл в своей знаменитой книге, переведенной на русский язык: "Регулярные выражения также можно сравнить с иностранным языком - когда вы начинаете изучать язык, он перестает казаться белибердой".
Читать дальшеИнтервал:
Закладка: