Титульная страница
ISO 9000 ISO 14000 Forum
Титульная страница
Цель системы качества
Управление качеством
ISO
ISO 9000
ISO 13485
ISO 14000
ISO 17025
OHSAS 18001
ISO 19011
Total Quality Management
Project Management
Фармацевтика
Отраслевые стандарты
Информационные технологии
Оформление документации
Ссылки 
Поиск на сайте
Forum
Реклама на сайте





Функции.

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

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. Легче искать ошибки
Rambler's Top100
Hosted by uCoz