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

Vladimir Timofeev vovkasm на gmail.com
Ср Окт 17 06:39:07 PDT 2012


17 октября 2012 г., 17:33 пользователь 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;
> не работает.
>
> А если у меня ссылки на массивы, что что придется их разыменовывать только
> для вызова?
>
> Зачем тогда такие прототипы нужны?

А они нужны только для эмуляции синтаксиса типа встроенного map, grep и т.п. )))

> А если везде использовать в прототипах $, то зачем тогда эти все @ и %?
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Vladimir Timofeev <vovkasm на gmail.com>


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