[Moscow.pm] Прототипы

ksvs ksvs1996 на ymail.com
Ср Окт 17 06:33:57 PDT 2012


А почему для

subfoo(&$) {
    my ($s, $v) = @_;
    $s->($v);
}

Вызов 
foosub { print @_ }, "hello\n";
работат

И 
foo { print @_ } "hello\n";
работает

А

my $print = sub { print @_ };
foo $print, "hello\n";
Не работает?

Почему большую функцию не можно вынести отдельно?

Неужели придется писать
subfoo($$);


Аналогичная ситуация с массивами и хешами:

sub foo(\@\%) {
    my ($a, $h) = @_;
    printscalar @$a, "\n";
}

my @foo = (1, 2);
my %foo = (1 => 2);


Вот так работате.
foo @foo, %foo;



А так 

foo \@foo, \%foo;
не работает.

А если у меня ссылки на массивы, что что придется их разыменовывать только для вызова?

Зачем тогда такие прототипы нужны?
А если везде использовать в прототипах $, то зачем тогда эти все @ и %?
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121017/687c4e02/attachment.html>


Подробная информация о списке рассылки Moscow-pm