问题描述
我有一个像这样的 Perl 文件:
使用严格;f1();子 f3(){ f2();}子 f1(){}子 f2(){}
简而言之,f1
在定义之前被调用.因此,Perl 发出警告:f1 调用过早,无法检查原型".但是 f2
的情况也是如此,唯一的区别是它是从另一个子程序内部调用的.它不会对 f2
发出警告.为什么?
解决此问题的最佳方法是什么?
- 在调用之前声明子程序
- 像这样调用子程序:
&f1();
你可以通过不使用原型来完全避免这个问题:
使用严格;f1();子 f3 { f2() }子 f1 {}子 f2 {}
不要使用原型,除非您知道为什么要使用它们:>
当然,这一切都非常强大,只能适度使用,以使世界变得更美好.
I have a Perl file like this:
use strict;
f1();
sub f3()
{ f2(); }
sub f1()
{}
sub f2()
{}
In short, f1
is called before it is defined. So, Perl throws a warning: "f1 called too early to check prototype". But same is the case with f2
, the only diff being that it is called from inside another subroutine. It doesn't throw a warning for f2
. Why?
What is the best way to resolve this issue?
- declare the subroutine before it is called
- call the sub like this:
&f1();
You can completely avoid this issue by not using prototypes in the first place:
use strict;
f1();
sub f3 { f2() }
sub f1 {}
sub f2 {}
Don't use prototypes unless you know why you are using them:
这篇关于为什么我被“过早打电话来检查原型"?我的 Perl 代码中出现警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!