(注:可能会不定时更新)
1.Name “main::x” used only once: possible typo at …
1.Name "main::x" used only once: possible typo at ...
给某个变量赋值但是从来没有用它,或者变量之只用一次但没有给它赋值,这一般表示在代码中隐含某个错误。
大概唯一“合理”的解释就是输入错。比如说给变量赋值,
use warnings; $x = 42;
你可能会对"main::“部分没有$ 符号感到奇怪。这是因为Perl的变量默认是在"main"命名空间下。
或许有好多东西都称为"main::x”,但是只有一个在将$作为前导符号。如果这听起来很迷惑人,不要担心。 因为它本来就很复杂。
只取值
如果你只使用某个变量一次
use warnings;
print $x;
那么会得到两条错误信息:
Name "main::x" used only once: possible typo at ...
Use of uninitialized value $x in print at ...
其中之一是我们正在讨论的,而另一个将会在使用未初始化的值中讨论。
有什么输入错误?
你可能会这么问。
设想一下,有人使用了一个变量$ l1,之后你要使用同一个变量,但是你却输入了$ ll。可能是因为在你的字体中它们看起来很像。
或者变量是$ color,但你是英国人,你可能自然而然地在考虑同一个东西的时候输入$ colour。
再或者有个变量是$ number_of_misstakes,而你没有注意到原来的变量就有输入错误,然后你输入了$ number_of_mistakes。
理解了吧。
如果幸运的话,你可能只犯一次错误,不过如果你倒霉地使用了两次错误的变量,这样的警告就不会出现了。毕竟你两次使用了同一个变量两次,可能有个好的理由。
那么如果避免呢?
尽可能不要使用有歧义的字母,并且在输入变量名字的时候尽量小心一点。
如果想真正的解决这个问题,你可以使用use strict!
use strict
上面的例子中你发现我没有使用strict。如果用的话,就不会有可能输入错误的警告,取而代之的是编译时错误:Global symbol requires explicit package name。
即便你多次使用错误的变量也会出现这样的提示。
当然,看到错误后有些人会匆忙地在错误的变量前面加上"my",但你不会这么做,对么?正确的做法是好好思考问题,直到搜索到真正的变量。
如果没有使用strict通常会看到这个警告。
然后你就陷入了麻烦之中。
2.BEGIN not safe after errors–compilation aborted
2.BEGIN not safe after errors--compilation aborted
3.Can’t locate Coordinate.pm in @INC
3.Can't locate Coordinate.pm in @INC
出现上面三个错误,大部分的原因是没有配置相应的资料包在komodo里面,因为需要运行的东西是需要很多资料包辅助运行的,才可以成功运行。