Функции


# Типичная Perl-функция

sub f {
    my ($x,$y) = @_;
    local ($visible) = 111;
    my $z = shift;
    print $_[1];
    return 1 if ($x>100);
    0;
}

# или просто f(1,2,3);
&f(1,2,3);

* По умолчанию все переменные в perl - глобальны
* my ($x) - объявление локальной переменной
* local ($x) - объявление переменной, доступной для всех вызванных ниже функций
* функции могут быть вложенными

# Можно определить контекст, в котором вызвана фукнция

if (wantarray()) {
    # array
}
elsif (defined wantarray()) {
    # scalar
}
else {
    # unknown
}

mysub();      # unknown
$a = mysub(); # scalar
@a = mysub(); # array


# Можно определить стек вызова:

($package, $filename, $line, $sub, $has_args, $wantarray) = caller(1);

* Есть также встроенные __LINE__, __FILE__, __PACKAGE__

# Функция с именованными параметрами:

sub f {
    my %argv = (
        DEFVAL1 => 0,
        DEFVAL2 => 'str',
        @_
    );
}

f(DEFVAL1=>1, DEFVAL2=>'string');