2014-02-20 4 views
1

Время от времени я вижу сценарии Perl, где вызывается подпрограмма с ведущим '&'. Является ли это наследием или дает какую-либо пользу? Как вызов подпрограммы без знака амперсанда также работает.Perl вызов подпрограммы с ведущим '&'

sub mysub { 
     print "mysub\n"; 

} 

mysub; 
&mysub; 

Thx/Hermann

+1

http://perldoc.perl.org/perlfaq7.html#What's-the-difference-between-calling-a-function-as-%26foo-and-foo()%3f – fugu

+0

@Quentin Я думаю, re ссылаясь на [goto] (http://perldoc.perl.org/functions/goto.html). –

ответ

4

Вызов с &, как правило, код запах, что кто-то не знает, что они делают, и в мышлении Perl4. В вашем конкретном примере он работает точно так же. Однако вызов с & отключает прототипы функций, поэтому продвинутые пользователи могут использовать его в определенных обстоятельствах. Вы должны ожидать увидеть комментарий , почему рядом с вызовом в этом случае.

+4

* Perl4 mindset. * Возможно, приобретенный путем обучения по поиску и сбору плохих примеров – justintime

+0

Спасибо, что мне сейчас ясно. В моем конкретном случае реальная подпрограмма имела прототип или даже пустой прототип (не знаю, как сказать): sub mysub() {...}. Это работает, только если вы отключите прототипы функций с помощью &. – user2050516

+0

См. Скобку рядом с mysub(). Вызов этой подпрограммы с() прототипом работает только в том случае, если вы отключите прототипы функций с помощью & &mysub; – user2050516

Смежные вопросы