Спасибо. Оказывается я старую доку читал.
Там не было прототипа "+".
________________________________
From: MonsAnderson <[email protected]>
To: Moscow.pm group <[email protected]>
Sent: Thursday, 18 October 2012, 15:27
Subject: Re: [Moscow.pm] Прототипы
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 mailinglist
>[email protected] | http://moscow.pm.org
>
>
--
Bestwishes,
Vladimir V. PerepelitsaakaMonsAnderson
<[email protected]>, <[email protected]>
http://github.com/Mons
--
Moscow.pm mailinglist
[email protected] | http://moscow.pm.org--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org