Владимир Маслов - Введение в Perl
- Название:Введение в Perl
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Владимир Маслов - Введение в Perl краткое содержание
В книге приводятся начальные сведения по новому языку программирования Перл.
Данный язык получил широкое распространение в связи с развитием компьютерной сети Интернет. Все примеры в книге проверены для Перл версии 5.003 операционной системы Unix FreeBSD 2.1.0.
Для программистов, системных администраторов и пользователей компьютеров.
Введение в Perl - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для краткого описаня типа параметров передаваемых подпрограмме можно применять прототипы. В Перл существуют следующие прототипы:
Декларация Пример вызова
sub mylink($$) mylink $old, $new
sub myvec($$$) myvec $var, $offset, 1
sub myindex($$;$) myindex &getstring, «substr»
sub myreverse(@) myreverse $a, $b, $c
sub myjoin($@) myjoin ":",$a,$b,$c
sub mypop(\@) mypop @array
sub mysplice(\@$$@) mysplice @array, @array, 0, @pushme
sub mykeys(\%) mykeys %{$hashref}
sub myopen(*;$) myopen HANDLE, $name
sub mypipe(**) mypipe READHANDLE, WRITEHANDLE
sub mygrep(&@) mygrep { /foo/ } $a, $b, $c
sub myrand($) myrand 42
sub mytime() mytime
Здесь:
\'символ' – параметр с типом 'символ'
'@' или '%'– все оставшиеся параметры как список
'$' – скаляр
'&' – безимянная подпрограмма
'*' – ссылка на таблицу имен
';' – разграничитель обязательных и не обязательных параметтров.
Иногда нужно в качестве параметра передать подпрограмме не значение элемента массива а ссылку на него, что бы подпрограмма могла изменить значение элемента. Для этого в Перл к имени переменной добавляется символ ' *' Подбное выражение называют 'type glob'так как в Юниксе символом '*'обозначают «все возможные значения». Поэтому '*'для массива означает «все элементы массива».
Для скаляров употряблять '*'не имеет смысла т.к. они и так передаются ссылкой и вы можете изменять значение параметра изменяя например переменную $_[0].
Большинство встроенных функций Перл можно переопределить своими собственными. Обычно это делают для удобства совместимости Перл для разных платформ систем.
Для этого нужно перечислить имена этих функций в виде:
use subs 'функция1', 'функция2' ....;
и далее в модуле определить сами функции.
Если вы попытаетесь вызвать не существующую функцию то Перл выдаст немедленно сообщение об ошибке. Но если вы определите подпрограмму с именем 'AUTOLOAD'то она будет вызвана с теми же параметрами а переменная $AUTOLOADбудет содержать имя не существующей подпрограммы. Данный механизм очень удобен для средств отладки.
Модули (packages)
В Перл реализован механизм модулей. Модуль это группа подпрограмм и переменных обычно включенных в один файл. Внутри одного модуля можно определить другой модуль. Начало модуля определяется директивой:
packages имя_модуля;
Конец модуля это конец блока или файла. Головной модуль имеет по умолчанию имя main. На имя внутри модуля можно ссылаться добавляя ' ::' после имени модуля.
Например:
$main::var1– переменная в головном модуле.
::var1 – то же самое. Имя main можно опускать.
$модуль1::var1 – переменная в модуле 'модуль1'
$модуль1::модуль2::var1– Модуль2 содержится в модуле 1.
Только идентификаторы начинающиеся с буквы или символа ' _' хранятся в пространтсве имен текущего модуля. Остальные хранятся в пространстве головного модуля main .
Кроме этого имена STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INCи SIGтак же хранятся в головном модуле.
Все имена модуля хранятся в ассоциативном массиве (хеше) с именем модуля к которому добавлены символы " ::". Таким образом имена головного модуля хранятся в %main::, модуля 'mod1'в %mod1::и т.д. Выражение вида *имяуказывает значение элемента хеша 'имя' это удобно для определения констант.
Например:
*pi = \3.14159;
Здесь переменная $pi– это константа пи которую уже нельзя изменить.
Конструктор – это подпрограмма которая выполняется в момент создания объекта, а деструктор – удаления объекта. Для модуля это подпрограммы с именами BEGIN и END. При определении этих подпрограмм слово subможно опускать.
Конструктор BEGIN выполняется сразу как только возможно т.е. как только он определен даже не завершая дальнейший разбор программы. Можно указать несколько блоков BEGIN. Они будут выполняться один за другим в порядке определения.
Деструктор END выполняется последним как только возможно т.е. при завершении работы интерпрератора. Можно указать несолько блоков END при этом они будут выполняться в обратном определению порядке.
В Перл нет специального синтаксиса для классов. Но функционально полноценными классами могут быть модули. При этом подпрограммы модуля становятся методами, а с помощью массива @ISAможно реализовать механизм наследования в классах. Более подробно классы описаны отдельно.
Если вы хотоите создать модуль отдельным файлом и использовать как библиотеку подпрограмм, при этом вызывать подпрограммы библиотеки не указывая имени модуля, вам необходимо оформить модуль следующим образом:
package имя_модуля; # Такое же как и имя этого файла без расширения '.pm'
require Exporter; # Обязательная строка для экспорта имен
@ISA = qw(Exporter); # -//-
@EXPORT = qw(func1 func2)# Перечисляем имена функций. Внимание ! нет запятой!
@EXPORT_OK = qw( $переменная @массив );# Указать публичные переменные, массивы и т.д. если необходимо
{ # Начало блока модуля
.....
sub func1
........
sub func2
........
1;
}
Данный файл с расширением " .pm" должен храниться в одной из библиотечных директорий Перл. Они перечислены в массиве @INCодно из них обычно " /usr/local/lib/perl/".
В головной программе вы указываете:
use имя_модуля;
и вам становятся доступны имена подпрограмм данного модуля.
Стандартный набор библиотек обычно поставляется с дистрибутивом Перл они разделяются на pragmaбиблиотеки (работают как директивы компилятору) и стандартные библиотеки.
Данные библиотеки используют как:
use имя;
когда хотят включить действие и
no имя;
когда выключить.
В стандартный набор входят следующие pragma:
diagnostics – Включить режим расширенной диагностики.
integer – Использовать целочисленную арифметику.
less – Режим минимальной загрузки компилятора.
overload - Режим переопределения операторов.
sigtrap - Режим слежения за прерываниями.
strict - Режим ограниченного использования «опасных» операторов.
Читать дальшеИнтервал:
Закладка: