Ожидать окончание порожденного процесса. Возвращает PID для родительского процесса или -1 если нет процесса потомка.
Код завершения записывается в переменную $?.
waitpid PID, FLAGS
Ожидать окончания процесса потомка с указанным PID.
Возвращает либо PID этого процесса либо -1 если нет такого процесса. Код завершения записывается в перменную $?.
wantarray
Возвращает true если подпрограмма вызывается в списковом контексте и false – в скалярном.
warn список
Выодит в стандартный поток ошибок STDERR сообщение аналогично die(), но не прекращает работу программы.
write файл
write выражение
write
Выводит в файл форматированные данные по оператору format. По умолчанию имя формата совпадает с именем указателя файла. Имя файла-по умолчанию можно изменить функцией select(), а имя формата при этом надо присвоить переменной $~. Заголовок листа пишется автоматически. Если на листе не хватает места для вывода то выводится «перевод формата» и специальная форма заголовка листа затем сами записи. По умолчанию имя формата заголовка листа состоит из имени указателя файла и добавленной строки «_TOP». Динамически это млжно делать присваивая формат переменной $^. Количество оставшихся строк листа содержится в переменной $– и если присвоить ей 0 то произойдет смена листа. Подробно описание форматов смотри в главе «Форматы».
y///
Оператор транслятор. Смотри главу «Операторы».
*Подпрограммы*
Для применения подпрограммы ее необходимо определить либо в текщем модуле (файле) либо во внешнем модуле (файле).
Подпрограммы определяются и декларируются следующим образом:
subимя; # Только декларация. Определение ниже.
sub имя (прототипы); То же но с декларацией параметров.
sub имя блок; # Декларация и определение.
sub имя (прототипы) блок; # То же, но с парамметрами.
Для определения динамичской анонимной подпрограммы можно указать:
$переменная = sub блок;
Для импортирования подпрограмм из других модулей используйте:
use модуль qw(подпрограмма1 подпрограмма2 );
Вызов подпрограммы:
имя(список параметров); # символ '&' можно не указывать.
имя список; # Если подпрогрмма уже декларирована.
&имя; # Параметры в @_
Все параметры передаются подпрограмме как массив @_.
Соответсвенно $_[0] – первый параметр, $_[1] – второй и т.д.
Массив @_ – локальный, но он содержит адреса параметров поэтому можно изменять значение параметров.
Возвращаемое значение подпрограммы – результат последнего оператора.
Это может быть как скаляр так и массив. Можно принудительно возвращать результат используя функцию return().
Подпрограмму можно вызвать используя префикс '&' перед именем подпрограммы. Если подпрограмма предварительно продекларирована то префикс и скобки можно опустить.
Для применения переменных доступных только внутри блока или подпрограммы необходимо определить их с помощью функции my (
Если переменная одна то скобки можно опустить.
my() декларирует
Пример:
# Программа вычисления факториала.
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(
В общем лучше использовать
Применение функции
Для краткого описаня типа параметров передаваемых подпрограмме можно применять прототипы. В Перл существуют следующие прототипы:
Декларация Пример вызова
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
Здесь:
'символ' – параметр с типом 'символ'
'@' или '%' – все оставшиеся параметры как список