Perl / 3. Пользовательские функции

Мы уже видели и использовали некоторые встроенные системные функции – chomp, reverse, print и т. д. Но в Perl, как и в других языках, предусмотрена возможность создания пользовательских функций, также называемых подпрограммами (subroutines).1 Пользовательские функции позволяют многократно применять написанный фрагмент кода в программе. Имя пользовательской функции представляет собой идентификатор Perl (последовательность букв, цифр и символов подчеркивания, которая не может начинаться с цифры) с необязательным в некоторых ситуациях префиксом &. Специальное правило определяет, когда знак & можно опустить, а когда этого делать нельзя; оно будет приведено в конце этой главы. А пока мы будем просто использовать & всюду, где это не запрещено (самый безопасный вариант). В тех ситуациях, где запрещено, мы, конечно, скажем об этом.
Статьи раздела '3. Пользовательские функции':
Аргументы
Функция larger_of_fred_or_barney станет намного удобнее, если пользователь не будет ограничиваться применением глобальных переменных fred и $barney. Например, чтобы определить большее из значений $wilma и $betty функцией larger_of...
Возвращаемые значения
Вызов функции всегда является частью выражения, даже если результат вызова не используется напрямую. Вызвав &marine в предыдущем примере, мы вычисляли значение выражения, содержащего вызов, но игнорировали его результат. Чаще при ...
Вызов пользовательской функции
Пользовательская функция может быть вызвана из любого выражения по имени (со знаком &): &marine; # Hello, sailor number 1! &marine; # Hello, sailor number 2! &marine; # Hello, sailor number 3! &marine; # Hello, sailor number...
Вызов функции без &
А теперь, как и было обещано, мы расскажем, в каких случаях можно опускать знак & при вызове пользовательской функции. Если компилятор видит определение функции перед вызовом или если Perl по синтаксису может определить, что перед...
Директива use strict
Perl старается как можно меньше ограничивать программиста. Но иногда бывает желательно установить более жесткие дисциплинарные рамки; эта задача решается при помощи директивы use strict. Директива представляет собой инструкцию для...
Нескалярные возвращаемые значения
Возвращаемое значение пользовательской функции не ограничивается скалярным типом. Пользовательская функция, вызываемая в списочном контексте, может вернуть список. Допустим, вы хотите создавать диапазоны чисел, как при использован...
О лексических переменных (my)
Вообще говоря, лексические переменные могут употребляться в любом блоке, не только в пользовательских функциях. Например, их можно определять в блоках if, while или foreach: foreach (1..10) { my($square) = $_ * $_; # Приватная...
Оператор return
Оператор return немедленно передает управление из функции в точку вызова с возвратом значения: my @names = qw/ fred barney betty dino wilma pebbles bamm-bamm /; my $result = &which_element_is("dino", @names); sub which_elemen...
Определение пользовательской функции
Определение пользовательской функции состоит из ключевого слова sub, имени функции (без знака &) и заключенного в фигурные скобки блока программного кода, снабженного отступом. Блок содержит тело функции: sub marine { $n += 1;...
Приватные переменные в пользовательских функциях
Но если Perl создает новую копию @_ для каждого вызова функции, не может ли он также создать переменные, которые будут использоваться только внутри этой функции? Конечно, может. По умолчанию все переменные в Perl являются глобальн...
Пустые списки параметров
Улучшенный алгоритм &max теперь работает нормально даже в том случае, если функции передается более двух параметров. Но что произойдет, если функция вызвана вообще без параметров? На первый взгляд проблема кажется надуманной. Кому...
Списки параметров переменной длины
В реальном коде Perl пользовательские функции часто получают списки параметров произвольной длины. Это обусловлено уже упоминавшейся философией «отсутствия искусственных ограничений», принятой в Perl. Конечно, в этом Perl отличает...
Статические приватные переменные
Переменные, объявленные с ключевым словом my, являются приватными для пользовательской функции; при каждом последующем вызове они определяются заново. С ключевым словом state область видимости приватных переменных поQпрежнему огра...
Улучшенная версия &max
Давайте перепишем функцию &max так, чтобы она могла вызываться с произвольным количеством аргументов: $maximum = &max(3, 5, 10, 4, 6); sub max { my($max_so_far) = shift @_; # Пока сохраняем как максимальный # первый элемент ...

Страницы: 1