KnigaRead.com/

Михаил Шохирев - Язык программирования Perl

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Михаил Шохирев, "Язык программирования Perl" бесплатно, без регистрации.
Перейти на страницу:

Во второй форме блок предложений в конструкции eval, как и в конструкции do, становится выражением. Он компилируется обычным образом и выполняется во время работы программы, но возможные ошибки его выполнения также не приводят к аварийному завершению программы. Причину ошибки можно узнать из специальной переменной [email protected], а значением eval будет значение последнего предложения в блоке. Вот пример обработки ошибок в выражении eval:


$result = eval { # выполнить блок $x = 0; $y = 5; $z = $y / $x; # здесь будет деление на 0 }; # завершаем предложение точкой с запятой unless ( [email protected]) { # проверить специальную переменную на ошибки print "Выражение вычислено: $result"; } else { print "Ошибка вычисления: [email protected]"; }


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


use strict; # ограничить применение небезопасных конструкций use warnings; # выводить подробные предупреждения компилятора use diagnostics; # выводить подробную диагностику ошибок


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


use integer; # включить целочисленные вычисления print 10 / 3; # результат: 3 no integer; # отключить целочисленные вычисления print 10 / 3; # результат: 3.33333333333333


С помощью прагмы use constant можно определять в программе именованные константы, которые по традиции записываются заглавными буквами. Это делается таким образом:


use constant PI => 3.141592653; # число пи


С помощью прагмы use locale в программе включается действие национальных системных установок для некоторых встроенных функций, например, при работе со строками на русском языке:


use locale;


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

Материал этой лекции иллюстрирует упоминавшийся в лекции 1 принцип TMTOWTDI: в Perl часто существует несколько синонимичных конструкций, предоставляющих автору программы возможность наиболее точно выразить свой замысел в привычном для него стиле. Perl - демократичный язык, и каждый пишет на нем так, как ему удобнее и привычнее: начинающий программист использует простые средства, писавший ранее на другом языке найдет для себя знакомые конструкции, а опытный Perl-хакер может углубиться в синтаксические дебри. За многие годы использования Perl целой армией программистов в нем сложились устойчивые выражения (idioms, идиомы), подобные пословицам и поговоркам в естественных языках. Для примера можно привести некоторые из них:


# 1. Выполнять бесконечный цикл for (;;) # читается "forever" - "всегда" { } # тело бесконечного цикла # 2. Открыть файл или аварийно завершить программу open FILE or die; # "открой файл или умри!" # 3. Читать строки из входного потока и печатать их, # используя буферную переменную по умолчанию while (<>) { print; } # 4. Присвоить переменной значение по умолчанию # только, если ее значение не определено $variable ||= $default_value;


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

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


perldoc perlstyle


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


# вводные комментарии к программе use strict; # включение дополнительной... use warnings; # ... диагностики # use Env; # подключение нужных модулей (см. лекцию 13) # package main; # объявление пакета (см. лекцию 13) my $message = 'Привет!'; # объявление переменных и print $message; # запись алгоритма программы # описание форматов отчета (см. лекцию 10) # описание подпрограмм (см. лекцию 12) __END__ # необязательное обозначение конца программы


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


perldoc perlsyn


Лекция 5. Списки и массивы

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

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

Помимо уже изученных скалярных данных, в Perl широко применяется другой тип данных - списки. Если скаляры представляют в программе единичные объекты реального мира, то списки, как и в жизни, позволяют представить набор объектов, однотипных или совершенно разных, которые для решаемой задачи удобно рассматривать как единое целое (например, "список работников", "перечень документов", "опись товаров" и так далее). В то же время, всегда можно обратиться к любому элементу списка и обработать хранящуюся в нем информацию нужным образом, при необходимости повторяя действия для каждого элемента массива.

Итак, список - это упорядоченная последовательность отдельных скалярных данных в виде одного программного объекта. Способом представления значения списка в программе является списочный литерал, который записывается в виде последовательности значений, разделенных запятыми и заключенных в круглые скобки. Вот примеры списочных литералов:


(256, 512, 1024, 2048, 4096) # список из 5 чисел ('John', 'Paul', 'George', 'Ringo') # список из 4 строк ("Perl", 5.8) # список из строковых и числовых значений


Для записи списка текстовых строк, состоящих из одного слова, предусмотрена специальная форма списочного литерала, в которой после ключевого слова qw (сокращение от quoted words - "слова в кавычках") в скобках записываются строки, не заключенные в кавычки и разделяемые пробельными символами. В качестве скобок могут использоваться традиционные символы: (), {}, //, \, [] , <> и даже просто парные символы, такие как !! или ##. Например:


qw(это очень удобно) # вместо ('это', 'очень', 'удобно') qw/John Paul George Ringo/ # список слов, расположенный на 2 строках


Элементами списочного литерала могут быть не только строки и числа, но также скалярные переменные и выражения. Пустой список не содержит элементов и представляется списочным литералом без значений (одними круглыми скобками).


('One', $x, $x+$y-$z, 2*5) # список литералов и выражений () # пустой список


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


начальное_значение .. конечное_значение


В списочном контексте эта операция возвращает список значений. Возвращаемый список начинается со значения левого операнда, которое в цикле увеличивается на единицу, пока не будет достигнуто значение правого операнда. Приведем примеры:


5 .. 10 # возвратит список (5, 6, 7, 8, 9, 10) 5.3 .. 7.1 # возвратит список (5.3, 6.3), т. к. 7.3 > 7.1 7 .. 5 # возвратит пустой список (), т. к. 5 < 7 $m .. $n # диапазон, заданный значениями от $m до $n


Если операция диапазона применяется к строкам, то значения списка генерируются по правилам операции автоинкремента. С ее помощью удобно записывать различные списочные литералы:


(-2 .. 2) # список чисел (-2, -1, 0, 1, 2) (25, 53, 77 .. 79) # список (25, 53, 77, 78, 79) ('A'..'Z','a'..'z') # список заглавных и строчных букв ($start .. $finish) # список значений от $start до $finish

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*