2015-10-14 3 views
4

я получил следующий код:

sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) }

Может кто-нибудь сказать мне, что $;$ средства?

ответ

10

Материал в скобках за подзадачей называется прототипом. Они объясняются в perlsub. В общем, вы, , можете использовать, чтобы иметь возможность проверки ограничений времени компиляции.

Конкретные ($;$) используются для обязательных аргументов.

Точка с запятой (;) отделяет обязательные аргументы от необязательных аргументов. Это является излишним, прежде чем @ или%, что сожрать все остальное

Так вот, к югу должен быть вызван с по крайней мере один аргументом, но может иметь второй один.

Если вы вызываете это с тремя аргументами, это вызовет ошибку.

use constant _DR => 1; 
sub rad2rad  {@_} 
sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) } 

print deg2rad(2, 3, 4); 

__END__ 

Too many arguments for main::deg2rad at scratch.pl line 409, near "4)" 
Execution of scratch.pl aborted due to compilation errors. 

Обратите внимание, что прототипы не работают вызовы методов, как $foo->frobnicate().

В общем, прототипы считаются плохой практикой в ​​современном Perl и должны использоваться только тогда, когда вы точно знаете, что вы делаете.

Короткий и к точке пути The Sidhekin используется in their comment below суммирует это красиво:

Самая важная причина, они считаются плохой практикой, является то, что люди, которые не знают, что именно они делают , пытаются использовать их для чего-то, чего нет.

См. this question и его ответы для подробных объяснений и обсуждения по этой теме.

+4

Часть причины, по которой они считаются плохой практикой, - это слово «прототип». На других языках программирования это означает что-то еще. – Sobrique

+0

Это полезно. большое спасибо! –

+1

Самая важная причина, по которой они считаются плохой практикой, заключается в том, что люди, которые не знают точно, что они делают, пытаются использовать их для чего-то, чего нет. (Они - электроинструменты, читайте руководство и не используйте их, если не имеете в виду его.) –