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

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

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



-- 
Vladimir Timofeev <[email protected]>
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить