Язык программирования Perl
Шрифт:
Посмотрите, как изменится результат, если переписать предыдущий пример с использованием local вместо my в подпрограмме sub1:
Сравнивая эту программу с предыдущим примером, можно отметить следующие отличия.
1 Переменную $var в главной программе пришлось сделать глобальной, так как local не может скрывать лексические переменные.
2 Действие local распространяется до конца подпрограммы sub1, а также на вызываемую подпрограмму sub2.
3 При выходе из подпрограммы sub1 действие local заканчивается и восстанавливается значение, которое содержала глобальная переменная $var до применения к ней local.
В современных программах в основном используют функцию my для задания переменным лексической области видимости. Оправданное применение функции local в Perl обычно сводится к следующим случаям:
1 Временное скрытие значения глобальных переменных, в том числе у специальных переменных.
2 Временная модификация отдельных элементов массивов и хэшей, даже имеющих лексическую область видимости.
3 Создание локальных файловых манипуляторов в версиях Perl до 5.6, не поддерживающих использование лексических переменных для хранения файловых манипуляторов.
С помощью ссылок, подпрограмм и лексических переменных создаются очень интересные информационные объекты, называемые замыканиями (closure). Они основаны на известном принципе, что объект ссылки сохраняется до тех пор, пока на него
Подобным образом можно хранить ссылку на анонимную подпрограмму, из которой будут доступны динамически созданные лексические переменные. Такая подпрограмма, вызванная по ссылке, будет иметь доступ к области видимости этих переменных. Приведем пример простого замыкания:
Замыкания можно создавать динамически при выполнении программы. Приведем пример функции, которая при каждом вызове создает замыкание и возвращает ссылку на него. При этом каждый раз создается новый экземпляр лексической переменной, замкнутый от доступа извне:
В этой лекции изложены основные сведения о подпрограммах в Perl. Мы продолжим изучение подпрограмм в лекции 13, где будет рассказано о библиотечных модулях, и в лекции 14, посвященной объектному программированию на Perl.
Убийца
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
рейтинг книги
Алхимик. Компиляция. Книги 1-9
Алхимик
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Северные огни
Фантастика:
фэнтези
ужасы и мистика
рейтинг книги
Война
6. Мост и Меч
Любовные романы:
любовно-фантастические романы
рейтинг книги
И она поблагодарила богов
Детективы:
триллеры
рейтинг книги
Колчак
972. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги