Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание и вызов подпрограмм
Для создания пользовательских подпрограмм в Perl используется следующий синтаксис:
subимя-подпрограммы { оператор-1; .................... оператор-N; } При вызове подпрограммы запоминается место, в котором произошел вызов, выполняет операторы подпрограммы и затем возвращается в основную программу к месту вызова. Подпрограммы Perl могут быть вызваны в любом месте основной программы или же из других подпрограмм.
Возврат значений из подпрограмм
Подпрограмма, как и функции, операторы и выражения Perl, имеет значение. Оно называется возвращаемым значением. Возвращаемое значение подпрограммы – это значение последнего вычисленного в подпрограмме выражения или значение, явно возвращаемое оператором return. Подпрограммы могут возвращать не только скаляры, но и массивы или хэш-массивы.
Аргументы функций
Подпрограмма,Значения, передаваемые функции и изменяющие ее поведение, называются аргументами. Для передачи функции аргументов можно использовать следующий синтаксис:
имя-функции(арг1,арг2,арг3); имя-функцииарг1,арг2,арг3; &имя-функции(арг1,арг2,арг3);
Вторая форма (без скобок) может быть использована, только если интерпретатор Perl уже встречал определение этой функции. В подпрограмме доступ к аргументам осуществляется посредством специальной переменной @_. Для доступа к индивидуальным аргументам можно использовать индексы массива @_, как и в случае любого другого массива. Переменная @_ содержит реальный список исходных аргументов подпрограммы. Ее изменение или изменение любого ее элемента приводит к модификации соответствующих переменных, поэтому функция не должна изменять значения передаваемых ей аргументов, если только это не делается специально. Аргументы подпрограмм не обязательно должны быть скалярами. Можно передавать в подпрограмму массив или хэш-массив, однако, учитывая правила присвоения значений элементам массива, нельзя передавать в качестве аргументов два массива, поскольку все значения будут присвоены первому массиву, а второй массив останется пустым. Поэтому функции можно передавать только один массив, причем, если передаются и массив и скаляры, то надо поместить массив или хэш-массив последним в списке аргументов.
Область видимости
Язык Perl позволяет использовать одни и те же имена для обозначения различных переменных в большой программе. По умолчанию, переменные Perl видимы в основной программе и в подпрограммах. Это так называемые глобальные переменные. Допустим, вам нужно создать переменную, относящуюся только к данной функции. Для этого следует воспользоваться операторомmy. Внутри подпрограммы переменная, объявленная с помощью оператора my является личной переменной. Другие подпрограммы или функции программы не имеют доступа к этой переменной. Та часть программы, в которой можно использовать данную переменную, называется областью видимости переменной. Личные переменные после окончания подпрограммы аннулируются, т.е. занятая ими память освобождается. Можно объявить переменные даже с меньшей областью видимости, чем целая подпрограмма. Для этого следует поместить оператор my в блок. Это может быть либо основной блок подпрограммы, либо какой-нибудь другой блок. В Perl подпрограмма может вызывать саму себя, т.е. допустимы рекурсивные подпрограммы.
Работа со строками в Perl
В Perl входит несколько функций работы со скалярами как строками. Если необходимо определить, содержится ли указанная строка внутри другого скаляра, можно использовать функцию index. Ее синтаксис выглядит следующим образом:
indexстрока, подстрока indexстрока,подстрока,начальная-позиция
Функция index начинает просмотр строки слева и ищет в ней подстроку. Во второй версии функции в параметре начальная-позиция задается позиция в строке, с которой начинается поиск подстроки (в первой версии поиск начинается с начала строки). Функция возвращает позицию, в которой найдена подстрока (позиции в строке нумеруются, начиная с нуля). Если подстрока не найдена, функция index возвращает значение -1. Функция rindex работает точно так же, как index, за исключением того, что поиск начинается с крайнего правого символа строки и проводится в левую сторону. Синтаксис этой функции выглядит следующим образом.
rindexстрока, подстрока rindexстрока, подстрока, начальная-позиция
Функция substr возвращает подстроку указанной строки и имеет следующий синтаксис:
substrстрока,смещение substrстрока,смещение,длина
В первой версии функция возвращает подстроку, начинающуюся с заданного индекса – смещения в строке и до конца строки, во второй версии возвращается подстрока указанной длины (если в результате происходит выход за пределы строки, то просто берется подстрока до конца строки). Если задано отрицательное значение параметра смещение, то функция substr начинает отсчет справа. Если задано отрицательное значение параметра длина, то функция substr возвращает подстроку от начальной позиции и до конца строки, за исключением последних символов, количество которых определяется параметром длина. Функцию substr можно использовать также в левой части оператора присваивания. Такая конструкция позволяет указать, какие символы в скаляре должны быть заменены. В этом случае в качестве первого аргумента функции substr следует задать скалярную переменную, а не строку символов, которой будет присваиваться значение.
Регулярные выражения в Perl |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 404. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |