Perl:如何正确初始化哈希或数组

时间:2013-07-08 13:10:11

标签: arrays perl hash

在几个在线教程中,我注意到哈希或数组的初始化方式有所不同:

my %new_hash_1 = ();
# or
my %new_hash_2;

my @new_array_1 = ();
# or
my @new_array;

通过将元素推送到数组或向哈希值中添加键,值对的基本练习,我初始化变量的方式并不重要。

通过进一步的谷歌搜索,我了解到:

%new_hash_1 = ();

有时用于清空现有的哈希值。

所以我想我的问题是:

  • 应该使用哪种方法初始化哈希/数组?
  • 每种方法都有特定的目的吗?或者这是TIMTOWTDI的一个例子吗?

非常感谢。

3 个答案:

答案 0 :(得分:3)

由于构造哈希和数组的方式,如果在声明它们时为它们分配空列表没有区别。它们仍将包含零元素,您尝试从中读取的任何元素都将是未定义的。

将空列表分配给散列/数组的唯一目的是删除它已有的任何值,并且在初始化时,它们不包含任何值。

重要的是要注意,数组和散列只能包含标量值,只有标量值可以包含数据。

答案 1 :(得分:2)

my %hash创建一个新的空哈希。

my @array创建一个新的空数组。

为新创建的散列或数组分配空列表是无用的噪音,因为它们已经是空的。

答案 2 :(得分:-5)

两者都有效,但在维护方面,最好将它们分开,并用括号()和带有花括号{}的哈希初始化列表,到目前为止我的编码约定是:     我的%new_hash_1 = {};     我的%new_list_1 =();

这样做的好处是可以让以后更新代码的人轻松完成

my %new_hash_1 = { 'a' => 1, 'b' => 2 };

并且有助于use strict;use warnings更好地理解您在使用列表作为哈希时尝试执行的操作。

我还建议您使用PerlCritic http://search.cpan.org/~thaljef/Perl-Critic-1.118/lib/Perl/Critic.pm来获取更多用户友好的消息。

干杯, 的Jere。

ps:在Oreilly Programming Perl(http://docstore.mik.ua/orelly/perl3/prog/ch09_04.htm

中查看哈希值