Добро пожаловать на наш сайт!

Сайт посвящен компьютерам, софту, программированию и вообще информационным технологиям.

Надеямся Вам у нас понравится.

 
 

Меню сайта

 
Введение в Perl

Можно принудительно возвращать результат используя функцию
return().
Подпрограмму можно вызвать используя префикс '
&' перед именем подпрограммы. Если подпрограмма предварительно продекларирована то префикс и скобки можно опустить.

Private переменные.
Для применения переменных доступных только внутри блока или подпрограммы необходимо определить их с помощью функции
my(список).
Если переменная одна то скобки можно опустить.
my()декларирует
privateпеременные в пределах текущей подпрограммы, блока, функции
eval()или
do/require/useфайлов.
Privateпеременные аналогичны
autoпеременным в С.
Пример:
# Программа вычисления факториала.
print fact(3); # вычислить факториал 3*2*1
sub fact # Определяем подпрограмму.
{ my $m; # private переменная но не local !
$m = $_[0];
return 1 if $m <= 1;
return($m * fact($m -1));
}
Можно указывать начальные значения private переменных как:
 my(список) = выражение;
Так для вышеприведенного примера лучше было написать:
my($m) = $_[0];

Переменные типа local.
В общем лучше использовать
privateпеременные так-как это надежней и быстрее.
privateпеременные обеспечивают лексическую область применения (видимости) а
local– динамическую. Обычно это переменные форматов значение которых должно быть видимо из вызываемых подпрограмм.
Применение функции
local()не целесообразно в циклах так как она вызывается каждый раз и таким образом заметно замедляет время выполнения цикла.

Прототипы (prototypes).
Для краткого описаня типа параметров передаваемых подпрограмме можно применять прототипы. В Перл существуют следующие прототипы:
Декларация Пример вызова
sub mylink($$) mylink $old, $new
sub myvec($$$) myvec $var, $offset, 1
sub myindex($$;$) myindex &getstring, «substr»
sub myreverse(@) myreverse $a, $b, $c
sub myjoin($@) myjoin ":",$a,$b,$c
sub mypop(\@) mypop @array
sub mysplice(\@$$@) mysplice @array, @array, 0, @pushme
sub mykeys(\%) mykeys %{$hashref}
sub myopen(*;$) myopen HANDLE, $name
sub mypipe(**) mypipe READHANDLE, WRITEHANDLE
sub mygrep(&@) mygrep { /foo/ } $a, $b, $c
sub myrand($) myrand 42
sub mytime() mytime
Здесь:
\'символ' – параметр с типом 'символ'
'@'или
'%'– все оставшиеся параметры как список
'$' – скаляр
'&' – безимянная подпрограмма
'*' – ссылка на таблицу имен
';' – разграничитель обязательных и не обязательных параметтров.

Ссылка как параметр.
Иногда нужно в качестве параметра передать подпрограмме не значение элемента массива а ссылку на него, что бы подпрограмма могла изменить значение элемента.

Hosted by uCoz