"Дмитрий Леонов. Использование Perl в интернет-технологиях" - читать интересную книгу автора

foreach, который записывается как
foreach $i(@список)
{}

В этом случае скалярная переменная $i последовательно принимает
значения элементов списка. Например, перебрать все элементы хэша,
отсортированные по ключам, можно так:
foreach $i(sort keys %a)
{
print $a{$i}."\n";
}

При проходе по большому хэшу эффективнее использовать функцию each -
ценой потери сортировки:
while(($key, $value) = each(%a))
{
}

Для всех операторов цикла, кроме цикла с пост-условием, существуют
операторы last, прерывающий выполнение цикла, next, переходящий к следующей
итерации, и redo, обеспечивающий переход в начало текущего блока без
проверки условия. Их можно использовать в сочетании с метками:
OUTER: while(условие 1)
{
INNER: while(условие 2)
{
if(условие 3)
{
next OUTER; #переход на следующую итерацию внешнего цикла
}
}
}


Функции записываются следующим образом:
sub f
{
}

и вызываются как f();
Значение из функции возвращается оператором return, при отсутствии его
возвращаемым значением является результат последней выражения, вычисленного
в функции. При передаче параметров в функцию они заносятся во встроенную
переменную @_, доступ к элементам которой можно получить как к элементам
обычного массива: $_[0] и т.п., а также через функции shift, pop и т.п.
Таким образом, функции могут иметь переменное количество параметров.
Переменные, используемые в функциях, по умолчанию имеют глобальную
область видимости:
sub f
{