过早打电话来检查原型

过早打电话来检查原型

本文介绍了为什么我被“过早打电话来检查原型"?我的 Perl 代码中出现警告?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我有一个像这样的 Perl 文件:

使用严格;f1();子 f3(){ f2();}子 f1(){}子 f2(){}

简而言之,f1 在定义之前被调用.因此,Perl 发出警告:f1 调用过早,无法检查原型".但是 f2 的情况也是如此,唯一的区别是它是从另一个子程序内部调用的.它不会对 f2 发出警告.为什么?

解决此问题的最佳方法是什么?

  1. 在调用之前声明子程序
  2. 像这样调用子程序:&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?

  1. declare the subroutine before it is called
  2. 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 代码中出现警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 11:10