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
