我得到以下代码:
sub deg2rad ($;$) { my $d = _DR * $_[0]; $_[1] ? $d : rad2rad($d) }
谁能告诉我什么$;$
means?
子声明后面括号中的内容称为原型。它们的解释在perlsub。一般来说,你can使用它们来限制编译时参数检查。
特别是($;$)
用于强制参数。
分号 (;) 将强制参数与可选参数分隔开。在 @ 或 % 之前是多余的,它会吞噬其他所有内容
所以在这里,必须使用 sub 来调用至少一个论点, but 可能有第二个.
如果你用三个参数调用它,它会抛出一个错误。
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 中,原型被认为是不好的做法并且只有当您确切知道自己在做什么时才应该使用。
简明扼要的方法西德金 used 在他们下面的评论中总结得很好:
它们被认为是不好的做法的最重要原因是
不确切知道自己在做什么的人正在尝试使用
他们因为一些他们不是的东西。
See 这个问题及其有关该主题的详细解释和讨论的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)