Perl对静态代码检查的支持有限,特别是它可以检查我们是否将适当数量的参数传递给函数.例如,这将导致错误:
use strict;
use warnings;
sub f($) {}
f(2, 3)
Too many arguments for main::f
Run Code Online (Sandbox Code Playgroud)
如果我们过早地调用f,我们会得到另一个有用的警告:
use strict;
use warnings;
f(2, 3)
sub f($) {}
main::f() called too early to check prototype
Run Code Online (Sandbox Code Playgroud)
这将导致错误:
use strict;
use warnings;
sub f($) {}
sub g() { f(2, 3) }
Too many arguments for main::f
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我们能够得到以下情况的消息:
use strict;
use warnings;
sub g() { f(2, 3) }
sub f($) {}
Run Code Online (Sandbox Code Playgroud)
因为我在这里没有收到任何错误或警告.如果我可以阻止编译代码,那将是件好事.请指教.
Rob*_*sch 11
"知情人士"(最值得一提的是Damian Conway在他的书"Perl Best Practices"中)建议不要使用子程序原型,因为它们只能通过"使得无法推断出子程序调用的参数传递行为来模糊代码"通过看电话."
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |