美元是什么在Perl函数定义中是什么意思?

美元是什么在Perl函数定义中是什么意思?,perl,Perl,我得到了以下代码: sub-deg2rad($;$){my$d=\u-DR*$\u[0];$\u[1]?$d:rad2rad($d)} 谁能告诉我是什么$的意思是?子声明后面括号中的内容称为原型。它们在本节中进行了解释。通常,您可以使用它们进行编译时参数检查 特定的($;$)用于强制参数 分号(;)将强制参数与可选参数分开。它在@或%之前是多余的,它吞噬了其他所有东西 因此,这里必须使用至少一个参数调用sub,但是可能有第二个参数 如果用三个参数调用它,它将抛出一个错误 use constant

我得到了以下代码:

sub-deg2rad($;$){my$d=\u-DR*$\u[0];$\u[1]?$d:rad2rad($d)}


谁能告诉我是什么$的意思是?

子声明后面括号中的内容称为原型。它们在本节中进行了解释。通常,您可以使用它们进行编译时参数检查

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

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

因此,这里必须使用至少一个参数调用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.

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

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

所采用的简明扼要的方式很好地概括了这一点:


他们被认为是坏习惯的最重要原因是 那些不知道自己在做什么的人正在尝试使用 因为他们不是


有关该主题的详细解释和讨论,请参阅及其答案。

它们被视为不良做法的部分原因是单词
原型。在其他编程语言中,它意味着其他东西,这很有帮助。谢谢!他们被认为是坏习惯的最重要原因是,那些不知道自己在做什么的人,正试图利用他们来做他们不知道的事情。(它们是电动工具;请阅读手册,除非你是认真的,否则不要使用。)