$; $在Perl函数定义中意味着什么?

for*_*ack 4 perl

我得到以下代码:

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

谁能告诉我什么$;$意思?

sim*_*que 10

子声明后面的括号中的内容称为原型.它们在perlsub中解释.通常,您可以使用它们来限制编译时参数检查.

该特定($;$)用于强制参数.

分号(;)将必需参数与可选参数分开.它在@或%之前是多余的,它吞噬了其他所有东西

所以在这里,sub必须至少用一个参数调用,但可能有第二个参数.

如果用三个参数调用它,它将引发错误.

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.
Run Code Online (Sandbox Code Playgroud)

请注意,原型不适用于方法调用$foo->frobnicate().

通常,原型在现代Perl中被认为是不好的做法,只有在您确切知道自己在做什么时才应该使用原型.

Sidhekin 在下面的评论中使用的简短方法总结得很好:

他们被认为是不良行为的最重要原因是那些不确切知道自己在做什么的人正在尝试将它们用于他们不做的事情.

请参阅此问题及其答案,以获取有关该主题的详细说明和讨论.

  • 他们被认为是不良做法的部分原因是"原型"这个词.在其他编程语言中,它意味着其他东西. (4认同)