Perl практика

         

Аргументы.


Аргументы вызова функции передаются через пременную @_

sub say_hello_to { print "Hello, $_[0]!\n"; } say_hello_to("world"); sub say { print "$_[0], $_[1]!\n"; } say_hello_to("hello", "world");

Пременная @_ является локальной для подпрограммы. Если для @_

устанавливается глобальное значение, то оно затеняется на время выполнения подпрограммы.

sub add { $sum = 0; foreach $_ (@_) { $sum += $_; }

return $sum; } $a = add(4, 5, 6); print add(1..5);



Локальные переменные в функциях.


При помощи операции my можно создавать локальные переменные

sub add { my($sum); $sum = 0; foreach $_ (@_) { $sum += $_; }

return $sum; }

sub bigger_than_100 { # создает список всех элементов массива &gt 100 my(@result); foreach $_ (@_) { if($_ > 100) { push(@result, $_); } } return @result; }

sub bigger_than { # создает список всех элементов массива &gt 100 my($n, @values); ($n, @values) = @_;

my($result); foreach $_ (@values) { if($_ > $n) { push(@result, $_); } } return @result; } @new = bigger_than(100, @list); @this = bigger_than(5, 1, 5, 15, 30); # @this содержит (15, 30)

Использовали две локальные переменные - это удобнее, чем указывать $_[0]

и @_[1..$#_].

Список, создаваемый my, можно использовать в правой части выражения:

my($n, @values) = @_;

my($sum) = 0;





Определение пользовательской функции.


sub имя { оператор_1; оператор_2; оператор_3; }

sub say_hello { print "hello, world!\n"; }

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



Полулокальные переменные. Функция local.


Локальные переменные, созданные при помощи функции local, видны в самой функции и функциях, вызываемых из нее.

Операцию my можно использовать только для обьявления простых скалярных переменных, переменных-массивов и хеш-переменных, для переменной local такие ограничения не установлены.

$value = "original"; tellme(); spoof(); tellme();

sub spoof { local ($value) = "temporary"; tellme(); }

sub tellme { print "Current value is $value\n"; }

Результат выполнения программы:

Current value is original Current value is temporary Current value is original



Создаваемые операцией my переменные файлового уровня.


Операцию my() можно использовать на внешнем уровне программы, что необходимо при использовании в сочетании с PERL-прагмой.

Если поставить прагму strict в начало программы, то становится небходимо использовать обьявление переменных с помощь операции my().

use strict; my $a; my @b = qw(fred mike igor); ... push @b, qw(betty); @c = sort @b; # mistake

Преимущества:

Программа работает несколько быстрее Легче искать ошибки



Возвращаемые значения.


sub sum_of_a_and_b { return $a + $b; }

При вычислении в списочном контексте подпрограмма может возвращать список

sub list_of_a_and_b { return ($a, $b); } $a = 5; $b = 6; @c = list_of_a_and_b();