Пятница, 24.11.2017, 10:21
Приветствую Вас Гость | RSS
Главная | Лекции | Регистрация | Вход
Меню сайта
Форма входа
Логин:
Пароль:
Категории раздела
Лекция [24]
Мини-чат
100
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 2
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Программирование Perl
    Главная » Статьи » Лекция » Лекция

    Лекция 2.2: Литералы и скалярные данные

    Интерполяция переменных

    Значения переменных, как и escape-последовательности, могут интерполироваться, если они помещены в строковый литерал, заключенный в двойные кавычки. Этим широко пользуются в программах на Perl для удобного формирования строк, в которые нужно подставить вычисленные значения переменных. Например, так:

    "Прочитано $n строк"
    "Используемая версия Perl = $]"
    "Письмо для $name отправлено по адресу $email"

    Благодаря разыменовывающему префиксу $, переменные хорошо различимы в строковых литералах. При интерполяции в качестве имени переменной рассматривается максимальная последовательность символов, которая может быть идентификатором. Поэтому нужно быть внимательным в случаях, когда после имени переменной в строке нет знаков препинания или пробелов. Например, при вставке в строку переменной $delimiter следующим образом:

    "One$delimiterTwo"

    будет подставлено значение несуществующей переменной $delimiterTwo. Чтобы явно отделить имя вставляемой переменной от последующих символов, нужно имя переменной после префикса заключить в фигурные скобки, вот таким образом:

    "One${delimiter}Two"

    Если в строковый литерал нужно включить символ доллара, не являющийся префиксом переменной, то можно заключить литералв одинарные апострофы или "экранировать" символ доллара (отменить его специальное значение), поставив перед ним обратную косую черту:

    'переменная $var не интерполируется'
    "переменная \$var не интерполируется"

    Контексты

    Весьма удобно, что преобразования между строками и числами выполняются автоматически в зависимости от контекставыражения, в котором они используются. В языке Perl для уточнения смысла языковых конструкций часто используется понятиеконтекста, под которым понимается программное окружение элемента языка (переменной, подпрограммы и так далее), определяющее его использование. Скалярные переменные, рассмотренные в этой лекции, используются в скалярном контексте(подразумевающем использование одного значения). А он, в свою очередь, может подразделяться на строковый и числовойконтекст. Например, в переменную помещено число:

    $year = 1987

    При использовании ее в числовом контексте (например, в арифметическом выражении для сложения с другим числом) будет использовано числовое значение переменной. При использовании этой же переменной в строковом контексте (например, воператоре вывода) будет произведено преобразование внутреннего представления числа к строке. Другой пример: если переменной не присвоено никакое значение, то в числовом контексте ее значением будет 0, а при использовании ее в строковомконтексте - пустая строка (''). К счастью, в большинстве случаев программисту вообще не приходится задумываться о контекстах, поскольку обычно perl выполняет как раз то, что имел в виду автор программы (в полном соответствии с упоминавшимся в первой лекции принципом DWIM). Но знание контекста помогает разобраться с тонкостями использования синтаксических конструкций языка Perl. В следующих лекциях мы познакомимся с другими контекстами, например, списочным и логическим.

    Специальные переменные

    В языке Perl существует большое число предопределенных переменных, хранящих разного рода текущую системную и пользовательскую информацию. Они называются специальными переменными, а их имена обычно состоят из одного специального символа. Вот некоторые из специальных переменных:

    $_ область ввода или поиска по образцу, используемая по умолчанию
    $. номер текущей считанной строки из текущего входного файла
    $/ разделитель входных записей (обычно - символ новой строки \n)
    $] номер версии Perl (например, 5.008007)
    $0 имя файла текущей исполняемой Perl-программы
    $@ сообщение об ошибке при выполнении в блоках eval или do
    $! текущий номер ошибки или сообщение об ошибке
    $^E уточненное сообщение об ошибке
    $^T время начала выполнения программы (в формате функции time)

    Некоторые специальные переменные доступны только для чтения, значения же других могут изменяться по усмотрению программиста. Поскольку нелегко запомнить назначение специальных переменных по их "очень специальным" именам, существует указание компилятору (use English), которое позволяет обращаться к ним по более понятным длинным именам, например:

    $ARG вместо $_
    $INPUT_LINE_NUMBER вместо $.
    $INPUT_RECORD_SEPARATOR,$RS вместо $/
    $PERL_VERSION вместо $]
    $PROGRAM_NAME вместо $0
    $EVAL_ERROR вместо $@
    $OS_ERROR, $ERRNO вместо $!
    $EXTENDED_OS_ERROR вместо $^E
    $BASETIME вместо $^T

    Полный список специальных переменных с их именами, а также советы по их использованию с отличными примерами всегда можно узнать из документации, вызвав справку утилитой

    perldoc perlvar

    О специальной переменной $_ следует поговорить особо. По своему назначению она выполняет роль местоимения "это" или "этот" (английские it или this). Ее употребляют, чтобы обратиться к обрабатываемому в текущий момент значению или порции данных. Эту переменную еще называют "переменной по умолчанию" или "буферной переменной", и многие встроенные функции вPerl-программе работают именно с этой переменной, если явно не указан другой аргумент. Например, при чтении из файла в нее может помещаться введенная строка, а функция print без параметров печатает значение переменной по умолчанию $_.

    Большинство специальных переменных являются глобальными, и программисту нужно быть очень осторожным при изменении их значений, так как в других частях программы и в подключаемых модулях может предполагаться их стандартное значение. Чтобы избежать нежелательной модификации таких переменных, нужно в каждой подпрограмме или блоке перед их изменением явно объявить их с помощью описателя local:

    local $save_value = $_;

    Тогда при выходе из блока будет восстановлено предыдущее значение специальной переменной.

    Комментарии

    В языке Perl, как и в языке командных интерпретаторов Unix, комментарий начинается с символа # и продолжается до конца строки:

    $lecture_number = 2; # комментарий, занявший часть строки
    # А это комментарий, занимающий всю строку

    В первой строке программы на Perl можно увидеть особый комментарий: он начинается с символов #! (называемых shebang, от названия символов - sharp и bang), и в нем указывается путь к исполняющей системе perl (полный путь от корня файловой системы). В операционных системах семейства Unix эта строчка помогает сделать программу на Perl исполняемой (если установить для файла программы флаг, "исполняемый" командой chmod +x program.pl ). В операционной среде Windows такой комментарий требуется использовать в CGI-программах для web-сервера Apache. Этот комментарий также удобен тем, что в нем можно указывать параметры для исполняющей системы Рerl: например, флаг -w для вывода дополнительных предупрежденийкомпилятора:

    #!C:\usr\local\perl\bin\perl -w

    Встроенная документация

    В Perl нет многострочных комментариев, подобных /* … */ в языке C или Java. (Хотя эту возможность можно добавить, еслиподключить модуль Acme::Comment, доступный в хранилище модулей CPAN.) Но если требуются комментарии из нескольких строк, то можно воспользоваться командами системы документирования Perl, называемой POD (от английского "Plain OldDocumentation" - "старая добрая документация"). Такой многострочный комментарий можно записать в виде

    =pod
     Знак = должен располагаться в самом начале строки.
     Текст этого комментария фактически является
     документацией в формате POD, встроенной в текст программы.
     Конец комментария (=cut) также должен быть в начале строки.
    =cut

    POD представляет из себя систему разметки текста, в том числе программной документации, который можно просматривать, печатать или конвертировать в другой текстовый формат, например, в HTML. Документация может храниться в текстовых файлах, обычно с суффиксом pod. Но благодаря тому, что компилятор perl игнорирует текст, окруженный командами POD, документацию можно встраивать в нужные места исходного текста программы. Вот наиболее часто используемые команды POD для оформления документации на программу, которые встречаются при чтении исходных текстов на Perl:

    =pod
    Начало документации (использовать не обязательно). 
    =headN текст заголовка
     Заголовок N-го уровня. Уровень N может быть от 1 до 4.
    =over N
     Абзац с отступом в N знаков, например, начало списка.
    =item заглавие элемента
     Начало элемента списка.
    =back
     Окончание списка.
    =cut
     Окончание POD-документации, возврат к тексту программы.

    Прочитать встроенную в программу POD-документацию в отформатированном виде можно с помощью поставляемой утилитыпросмотра:

    perldoc program_with_pod

    Описание в формате POD можно преобразовать в web-страницу поставляемой в комплекте с perl утилитой:

    pod2html --outfile=program.html program_with_pod

    Конечно, возможностей у системы POD гораздо больше. Узнать о них можно из поставляемой с дистрибутивом Perl документации, прочитав ее с помощью утилиты просмотра документации:

    perldoc perlpod

    В этой лекции изложены сведения о литералах и переменных - "молекулах" языка Perl. Они служат основой для создания выражений-"клеток", по воле программиста превращающихся в "живые организмы" - программы на языке Perl, многие из которых проживают долгую жизнь, развиваясь и принося пользу людям. В нескольких следующих лекциях будет излагаться "анатомия" Perl, без знания которой нельзя приступать к написанию программ...

    Категория: Лекция | Добавил: mazay (06.02.2014)
    Просмотров: 50 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Создать бесплатный сайт с uCozCopyright MyCorp © 2017