Power Perl Education главная страница возможности Power Guest Book темы оформления настройка скрипта FAQ Download благодарности

Функции.

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

sub имя {
	оператор_1;
	оператор_2;
	оператор_3;
}
sub say_hello {
	print "hello, world!\n";
}
Определения подпрограмм могут стоять в любом месте текста программы. Определения программ глобальны. В теле функции можно обращаться к переменным, используемым в других частях программы.

Вызов пользовательской функции.

say_hello();
$a = 3 + say_hello();

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

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();

Аргументы.

Аргументы вызова функции передаются через пременную @_
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 {	# создает список всех элементов массива > 100
	my(@result);
	foreach $_ (@_) {
		if($_ > 100) {
			push(@result, $_);
		}
	}
	return @result;
}

sub bigger_than {	# создает список всех элементов массива > 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;

Полулокальные переменные. Функция 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
Преимущества:
  1. Программа работает несколько быстрее
  2. Легче искать ошибки

Наши партнёры:
Каталог продукции ООО ВС Подшипник. Информация и прайс.
Советы и примеры - ремонтируем самостоятельно
Для вас Кулинарная книга, рецепты на каждый день.
Дамский уголок - внешность, здоровье, советы и консультации.


Copyright © ClericICN, 2002 - 2009