-->

Язык программирования Perl

На нашем литературном портале можно бесплатно читать книгу Язык программирования Perl, Шохирев Михаил Васильевич-- . Жанр: Прочая компьютерная литература. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Язык программирования Perl
Название: Язык программирования Perl
Дата добавления: 16 январь 2020
Количество просмотров: 559
Читать онлайн

Язык программирования Perl читать книгу онлайн

Язык программирования Perl - читать бесплатно онлайн , автор Шохирев Михаил Васильевич

Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 45 46 47 48 49 50 51 52 53 ... 82 ВПЕРЕД
Перейти на страницу:

}

print greeting(), '!';

Если выражение не указано, возвращается пустой список в списочном контексте и неопределенное значение undef - в контексте скалярном. В следующем примере функция проверки размера файла get_file_size() возвращает неопределенное значение как сигнал об отсутствии файла.

sub get_file_size { # узнать размер файла

return -s $file # вернуть размер, в т.ч. 0,

if -e $file; # если файл существует

return; # файла нет, вернуть undef

}

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

Помня о том, что списки в Perl - одномерные, становится понятным, что подпрограмма в Perl может возвращать только один список. Например, если в ней записано return (@array1, @array2), будет возвращен объединенный список из элементов @array1 и @array2. Поэтому при необходимости вернуть несколько списочных объектов возвращаются ссылки на них, например: return (@array1, @array2).

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

sub cube { # вычислить куб числа

return $_[0] * $_[0] * $_[0]; # умножить аргумент

}

print cube(2); # будет напечатано 8

Количество переданных аргументов можно выяснить, запросив число элементов массива @_. Для обработки списка аргументов переменной длины часто используется встроенная функция shift(), которая извлекает из массива параметров очередное значение, переданное подпрограмме:

print2files($message, $file1, $file2, $file3);

sub print2files { # вывести текст в несколько файлов

my $text = shift; # 1-й параметр - текст

while (@_) {

my $file = shift; # очередное имя файла

open my $fh, ">>$file" or die;

print $fh $text;

close $fh or die;

}

}

Если переданные аргументы заданы переменными, то массив параметров @_ совмещается с переданными аргументами. Это означает, что изменение элементов массива приведет к изменению значений соответствующих переменных в вызывающей программе. Это можно проиллюстрировать следующим (несколько искусственным) примером:

sub sum2 { # вычислить сумму 2-х чисел

$_[0] = $_[1] + $_[2]; # поместить сумму в 1-й аргумент

return;

}

my $a = 1, $b = 2, $sum = 0;

sum2($sum, $a, $b);

print "$a+$b=$sum"; # будет напечатано: 1+2=3

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

sub get_file { # считать данные из файла

my ($path, $file) = @_; # присвоить аргументы в переменные

return unless -e "$path/$file"; # авария: файла нет

open my $fh, '<', "$path/$file" or return;

my @lines = <$fh>; # прочитать все строки файла в массив

close $fh or return;

return @lines; # вернуть массив строк файла

}

my @data = get_file('/tmp', 'log.txt');

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

По той же причине, по которой подпрограмма не может возвращать несколько списков, она не может получать несколько отдельных списков в виде аргументов. Например, если подпрограмма вызвана так: subr1(@array1, @array2), то ей будет передан объединенный список из элементов двух массивов @array1 и @array2. Поэтому если необходимо передать несколько списочных объектов, то передаются ссылки на них, например: subr1(@array1, @array2).

При необходимости можно объявить подпрограмму до ее использования (forward declaration), а определение ее отнести в конец программного файла. При объявлении тело подпрограммы не записывается. Например:

sub factorial; # вычислить факториал числа

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

Подпрограммы в Perl вызываются, когда их имя употребляется в каком-либо выражении. В этот момент выполняются определенные в подпрограмме действия, а выражение получает возвращенный подпрограммой результат. Хотя довольно часто возвращаемое подпрограммой значение игнорируется. Про такое обращение к подпрограмме говорят, что она вызвана в пустом контексте (void context). Минимальное выражение для вызова подпрограммы состоит из одного имени подпрограммы, и это выражение превращается в предложение программы, когда после него стоит точка с запятой. Вот пример выражения, состоящего только из вызова подпрограммы в пустом (безразличном) контексте:

yellow_submarine('We all live in a');

1 ... 45 46 47 48 49 50 51 52 53 ... 82 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название