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

Mons Anderson mons на cpan.org
Чт Окт 18 05:27:15 PDT 2012


1. Тщательно прочитайте perlsub
2. Используйте прототипы с случае, если вы делаете функцию, которая
"могла-бы быть в перле", т.е. что-то похожее на встроенный функционал
3. никогда не используйте прототипы для методов (они все равно не работают)
4. Если вам нужно вызвать функцию без учета прототипа (как например
foo($sub,$arg)), то можно подавить проверку прототипа при помощи &:
&foo($sub,$arg);


2012/10/17 ksvs <ksvs1996 на ymail.com>

> А почему для
>
> sub foo(&$) {
>     my ($s, $v) = @_;
>     $s->($v);
> }
>
> Вызов
> foo sub { print @_ }, "hello\n";
> работат
>
> И
> foo { print @_ } "hello\n";
> работает
>
> А
> my $print = sub { print @_ };
> foo $print, "hello\n";
> Не работает?
>
> Почему большую функцию не можно вынести отдельно?
>
> Неужели придется писать
> sub foo($$);
>
>
> Аналогичная ситуация с массивами и хешами:
>
> sub foo(\@\%) {
>     my ($a, $h) = @_;
>     print scalar @$a, "\n";
> }
>
> my @foo = (1, 2);
> my %foo = (1 => 2);
>
> Вот так работате.
> foo @foo, %foo;
>
>
> А так
> foo \@foo, \%foo;
> не работает.
>
> А если у меня ссылки на массивы, что что придется их разыменовыватьтолько для вызова?
>
> Зачем тогда такие прототипы нужны?
> А если везде использовать в прототипах $, то зачем тогда эти все @ и %?
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>


-- 
Best wishes,
Vladimir V. Perepelitsa aka Mons Anderson
<inthrax на gmail.com>, <mons на cpan.org>
http://github.com/Mons
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121018/4e39bab5/attachment.html>


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