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


2012/10/17 ksvs <[email protected]>

> А почему для
>
> 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
> [email protected] | http://moscow.pm.org
>
>


-- 
Best wishes,
Vladimir V. Perepelitsa aka Mons Anderson
<[email protected]>, <[email protected]>
http://github.com/Mons
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить