我有一个像这样的Perl文件:
use strict;
f1();
sub f3()
{ f2(); }
sub f1()
{}
sub f2()
{}
Run Code Online (Sandbox Code Playgroud)
简而言之,f1在定义之前被调用.因此,Perl发出警告:"f1过早调用原型".但情况也是如此f2,唯一的区别是它是从另一个子程序内部调用的.它不会发出警告f2.为什么?
解决此问题的最佳方法是什么?
&f1();Sin*_*nür 16
您可以通过不首先使用原型来完全避免此问题:
use strict;
f1();
sub f3 { f2() }
sub f1 {}
sub f2 {}
Run Code Online (Sandbox Code Playgroud)
除非您知道原因,否则不要使用原型:
当然,这一切都非常强大,应该只在适度的情况下使用才能让世界变得更美好.
har*_*guy 11
只需从子例程定义中删除()即可.当您使用()定义时,Perl认为这些是原型,您必须在使用之前定义原型.
试试这个......
use strict;
f1();
sub f3
{ f2(); }
sub f1
{}
sub f2
{}
Run Code Online (Sandbox Code Playgroud)
小智 5
在 Perl 中定义函数时不应使用括号。当您这样做时,您会收到此错误。这是错误的:
sub DoSomthing(){
#do what ever...
}
Run Code Online (Sandbox Code Playgroud)
这是要走的路:
sub DoSomthing{
#do what ever...
}
Run Code Online (Sandbox Code Playgroud)
没有括号。
有关更详细的说明,请参阅 Gabor Szabo 的 Perl Maven 页面,了解 Perl 中的子例程和函数。 https://perlmaven.com/subroutines-and-functions-in-perl