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

时间:2011-06-20 13:36:23

标签: perl hash

我试过这段代码。这不起作用。我输出没有结果。我犯了什么错误?

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

键盘链接:http://codepad.org/vDVAxJcp

5 个答案:

答案 0 :(得分:9)

您宣布fruit_color但引用fruit_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.

答案 1 :(得分:7)

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

use strict;
use warnings;

其次,你有一个拼写错误(如果你使用了严格的模块,就会更容易发现。)

答案 2 :(得分:4)

伙计,你们这些人很快。

正如其他人所说:

  • 您创建了一个包含一个名称的列表,但随后将其引用到另一个名称。
  • 如果您使用了use warningsuse strict,则会收到一条错误消息,告诉您错误。

编写易读且相对无错误的Perl代码有很多提示和技巧。例如,我不在变量名中使用复数。因此,如果它是“水果”或“水果”的问题,我知道它应该是“水果”。我也倾向于使用像“fruitColorHash”和“FruitColorList”这样的术语来说出我的数据类型的名称,即使(Camel Casing isNotInStyleAnyMore,但是然后是Im_an_old_grouchy_developer_who_is_set_in_his_ways)。

Damian Conway的书Perl Best Practices是一本很好的书,可以帮助你学习所有这些技巧和技巧,帮助你避免这样的问题。事实上,这本书被认为是优秀Perl编程的试金石,现在有一整篇专门讨论Damian Conway的书籍Perlstyle,以及一个名为tidyperl的程序,它将帮助重新格式化和指出地方不遵循康威的例子。

所以,请继续查看Perldoc中的最佳实践部分(您知道perldoc文档,不是吗?输入命令perldoc并查看您获得的内容)并吸收知识放在那里。然后得到康威的书。

答案 3 :(得分:3)

您的代码中有一个拼写错误,如果您有以下内容,您会注意到:

use warnings;
use strict;
你的代码中的

。你应该永远这样。

答案 4 :(得分:1)

你有一个错字:

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

应该是

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