我在这段Perl代码中犯了什么错误?

我在这段Perl代码中犯了什么错误?,perl,hash,Perl,Hash,我试过这个密码。这不管用。我的输出没有结果。我犯了什么错误 my %fruit_color = ("apple", "red", "banana", "yellow"); my @fruits = keys %fruit_colors; my @colors = values %fruit_colors; print @fruits; print @colors; 代码板链接:您声明的是水果颜色,但引用的是水果颜色(注意后面的S) 如果你使用警告和严厉的话,你会注意到这一点 use warni

我试过这个密码。这不管用。我的输出没有结果。我犯了什么错误

my %fruit_color = ("apple", "red", "banana", "yellow");
my @fruits = keys %fruit_colors;
my @colors = values %fruit_colors;
print @fruits;
print @colors;

代码板链接:

您声明的是
水果颜色
,但引用的是
水果颜色
(注意后面的S)

如果你使用警告和严厉的话,你会注意到这一点

use warnings;
use strict;


Global symbol "%fruit_colors" requires explicit package name at C:\temp\test.pl line 4.
Global symbol "%fruit_colors" requires explicit package name at C:\temp\test.pl line 5.
您有一个输入错误:

my %fruit_color = ("apple", "red", "banana", "yellow");
应该是

my %fruit_colors =  ("apple", "red", "banana", "yellow");

第一个错误是没有将此作为第一行:

use strict;
use warnings;

其次,您有一个输入错误(如果您使用的是strict模块,那么会更容易发现)。

您的代码中有一个输入错误,如果您有:

use warnings;
use strict;

在你的代码中。你应该一直这么做。

伙计,你们这些人很快

正如其他人所说:

  • 您使用一个名称创建了一个列表,但随后将其引用到另一个名称
  • 如果使用了
    use warnings
    use strict
    ,则会收到一条错误消息,告诉您该错误
编写易读且相对无bug的Perl代码有很多提示和技巧。例如,我在变量名中不使用复数。因此,如果是“水果”或“水果”的问题,我知道它应该是“水果”。我也倾向于使用诸如“水果色哈希”和“水果色列表”之类的术语来表示我的数据类型的名称,尽管如此(驼色框不再是样式了,但我是一个老的、脾气暴躁的开发人员,在他的方式中是谁)

Damian Conway的书是一本优秀的书,它将帮助你学习所有这些技巧和技巧,帮助你避免类似的问题。事实上,这本书被认为是优秀Perl编程的试金石,现在有一整节专门介绍Damian Conway的书,名为,还有一个名为的程序,它将帮助重新格式化并指出不遵循Conway示例的地方


因此,请继续阅读Perldoc中的最佳实践部分(您知道
Perldoc
文档,不是吗?输入命令
Perldoc
,看看您得到了什么)并吸收其中的知识。那就去拿康威的书。

愚蠢的错误:p谢谢你的快速回复:)