是否可以在perl中阻止前向未声明的函数调用?

ags*_*mek 3 perl prototype

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"中)建议不要使用子程序原型,因为它们只能通过"使得无法推断出子程序调用的参数传递行为来模糊代码"通过看电话."