При закрытии подписчики были переданы в рассылку "Килограмм килобайтов" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Perl. Базовые типы и еще немного. Статья ориентирована на новичков Perl, но не на новичков программирования.
При написании использован Perl 5.6.x и замечательная книга "Perl Programming" (ISBN 0-596-00027-8) в переводном русскоязычном издании - "Программирование на Perl" (ISBN 5-93286-020-0). Эта книга может быть использована как в качестве самоучителя, так и справочника, наравне со штатной документацией, поставляемой в комплекте с Perl. В Perl логика выполнения зависит от контекста выражения. Контексты бывают разные и, как следствие, много вариантов интерпретации. Из-за этого Perl считают сложным для изучения, но если рассмотреть каждое правило в отдельности, то это вовсе и не сложно.
Кстати, вовсе не обязательно знать и применять все вариантны правил - это сильное отличие Perl от "строгих" языков. Достаточно знать наиболее употребимые правила и не лениться заглядывать в справочник при встрече незнакомого выражения.
Perl позволяет писать очень вольные по синтаксису программы, напоминающие синтаксис английского языка, но для лучшей читаемости и уменьшения вероятности ошибок лучше выработать для себя определенный стиль и стараться его придерживаться. Я наметил несколько статей для краткого ввода в понимание основ Perl-а. Четкого плана нет - объем и состав будет зависеть от отклика читателей и моего желания (ну и, конечно, наличия времени).
Если что-то в статье будет не понятно - спрашивайте на нашем форуме. Для обсуждения статей: http://forum.shelek.com/index.php?board=46.0 Для вопросов по Perl-у (но не по статьям): http://forum.shelek.com/index.php?board=121.0 В этой статье я расскажу о типах данных. Содержание:
1. Базовые типы данных. Базовые типы часто называют встроенными, но это не совсем верно, так как в Perl встроены и более сложные типы. Базовых типов всего три: скаляр, массив скаляров и хеш скаляров. Переменные этих типов обозначаются префиксами "$", "@" и "%" соответственно. 1.1. Скаляр. Пробразование величин, константы, сравнение. Скаляр - это одиночное значение. Скаляр внутренне может быть логическим значением, числовым (целым или действительным), строкой или ссылкой на объект любого другого типа. Любая из этих величин может быть преобразована в другую. Perl это делает автоматически, по необходимости (контекстно зависимо).
Исключением является только ссылка - можно автоматически преобразовать ссылку в строку или логическое значение, а другое значение в ссылку - нет. Ссылки же на объекты с перегруженными операторами могут вести себя иначе (как запрограммировано в классе), но в этой статье я этого касаться не буду. Это касается и преобразований - они тоже перегружаемы.
Кроме этого, возможно особое состояние значения - неопределенное. Оно может быть использовано как самостоятельное значение или быть преобразовано в другое, в зависимости от контекста. Для обозначения такой величины используется ключевое слово undef (от англ. undefined). Неопределенное значение соответствует пустой строке в строковом контексте, нолю в контексте арифметических операций и значению "ложь" в логическом выражении. Для работы с неопределенным значением используется функция defined. 1.1.1. Методы преобразования величин. 1.1.1.1. В строку. Скаляр преобразуется в строку при интерполяции, операции объединения строк (конкатенации) и при использовании скаляра в качестве ключа хеша (по той простой причине, что ключами хеша могут быть только строки). Код: (perl) $number = 11; $value = "$number"; # интерполяция Особенно интересен процесс интерполяции. Интерполяция происходит при помещении имени переменной в интерполируемый строковый контекст (есть и неинтерполируемый). Результатом будет замещение имени значением. Подробнее об этом - чуть позже.
Когда нужно принудительно преобразовать значение в строку, нужно или заключить имя переменной в двойные кавычки (если значение содержится в переменной), или выполнить конкатенацию со строкой (можно с пустой). 1.1.1.2. В число. Скаляр преобразуется в число при выполнении с ним арифметических действий (+ - * / % ** x neg). Код: (perl) $value = 1.0 * "22"; Если строка не может быть распознана как число, она преобразуется в ноль.
Когда нужно принудительно преобразовать значение в число, его сладывают с числом (типично - с нолем). 1.1.1.3. В логическое значение. Преобразование в логическое значение происходит в логических выражениях: логическими операторами (&& || ! or and not xor), в тернарном операторе ( ? : ) или в соответствующем контексте операторов условий и циклов. Также логическое значение получается в результате вычисления выражения с операторами сравнения (> < == >= <= != <=> gt lt eq ge le ne cmp).
Преобразование происходит следующим образом: ноль, пустая строка, строка, которая может быть преобразована в ноль (пример: "0"), и undef - преобразуются в ложь, а все остальные значения - истинны. Ссылки всегда истинны, так как являются указателями (перегрузка может изменить это). Код: (perl) if (0) { ... } # false 1.1.2. Константы. В Perl большое разнообразие в обозначении констант - все направлено на удобство изложения мысли в тексте. Опять-таки, если у кого от изобилия закружится голова, напоминаю: помнить и применять все не обязательно - вполне может хватить двух форм (не считая регулярные выражения) - одиночных и двойных кавычек. 1.1.2.1. Строковые. Я уже упомянал интерполируемый контекст. Отличие его от неинтерполируемого в том, что некоторые символы имеют специальное значение (выполняют некоторые специфичные функции) и для их включения в строку перед ними нужно поставить символ обратного слеша (backslash - "\"). В обычных строках таких символов четыре - "\", "$", "@", "%". В регурялных выражениях тоже есть зарезервированные символы и их значительно больше.
Кавычки следует рассматиривать как операторы. Почти каждому оператору есть эквивалент. Строковые константы:
В перечисленных выше операторах слеши можно заменить на любой символ, кроме пробельных (перевод строки, пробел, табуляция и т.п.). Если в качестве ограничителя используются скобки или кавычки, то они обязательно должны быть парными. В одиночных кавычках интерполяция не происходит, даже если оператор ее подразумевает.
Чтобы не ухудшать вид программы и не наступить на грабли тонкостей некоторых конструкций, не следует заменять слеши на другие символы. В тоже время, для регулярных выражений замена слеша на другой символ - частая практика (особенно если слеш часто встречается в регулярном выражении). При этом форма оператора поиска по шаблону "//" запрещает замену слешей (единственное исключение) для предотвращения неоднозначности. Код: (perl) $value = 'строка1' . "строка2" . qw/два слова/ . (еще, три, слова) . q/строка3/ . qq/строка4/; Круглые скобки могут выступать в роли оператора принудительного создания списочного контекста (об этом ниже).
Для удобства задания строковых констант есть еще три формы: встроенные домументы (document here), последовательности кодов (v-строки) и специальные контанты Perl-а.
Встроенные документы. Применяется для удобного задания многострочного текста. Интерполяция текста выполняется. Задается как последовательность "<<" и строковая константа (идентификатор), которой будет завершен текст. Константа может быть голой или в двойных или одиночных кавычках. Документ начинается со строки, следующей за выражением. Терминирующая константа должна быть на строке в гордом одиночестве и в самом ее начале. Код: (perl) $value = <<ТЕРМИНАТОР; Таких документов может быть несколько. В этом случае они располагаются друг за другом без интервалов. Код: (perl) $value = "строка1" . <<СТРОКА2 . "строка3" . << 'СТРОКА4' . "строка5"; Добавлю еще, что если используется голый идентификатор, то между символами "<<" и идентификатором не должно быть пробелов.
V-строки используются для задания строки последовательностью десятичных кодов, разделенных точками. Код: (perl) $value = v32.13.10; # последовательность: пробел, возврат каретки и перевод строки. Специальные константы Perl-а используются для динамической подстановки таких строк, как имя исполняемого в данный момент файла (__FILE__), номер строки в файле(__LINE__), имя класса (__PACKAGE__) и других.
Есть несколько специальных констант, используемых не по назначению: __DATA__ и __END__. К текстовым константам они прямого отношения не имеют (но тоже полезны).
Имена всех этих констант начинаются и завершаются двумя символами подчеркивания. Целиком статью можно прочитать на нашем сайте. Ждем вас также в разделе форума "Идеи для статей". Здесь собраны вопросы, ответы на которые не сформулировать в двух словах. Попробуйте свои силы. Подробнее по ссылке: http://forum.shelek.com/index.php/board,105.0.html И не забудьте посетить наш "домик" на карте в Интернете по ссылке http://www.internetmap.info/cgi-bin/go.cgi?site_id=4131%22%20 А теперь прощаемся с Вами до следующего выпуска. С уважением, команда Клуба. |
В избранное | ||