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

Arrays Perl:如何正确初始化哈希或数组,arrays,perl,hash,Arrays,Perl,Hash,在几个在线教程中,我注意到哈希或数组初始化方式的变化: my %new_hash_1 = (); # or my %new_hash_2; my @new_array_1 = (); # or my @new_array; 我的基本练习是将元素推入数组或将键、值对添加到散列中,初始化变量的方式似乎并不重要 通过进一步的谷歌搜索,我了解到: %new_hash_1 = (); 有时用于清空现有哈希 所以我想我的问题是: 应该使用哪种方法初始化哈希/数组 每种方法都有其独特的用途吗?或者这是

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

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

my @new_array_1 = ();
# or
my @new_array;
我的基本练习是将元素推入数组或将键、值对添加到散列中,初始化变量的方式似乎并不重要

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

%new_hash_1 = ();
有时用于清空现有哈希

所以我想我的问题是:

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

非常感谢。

我的%hash
创建一个新的空hash

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


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

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

将空列表分配给哈希/数组的唯一目的是删除它已有的任何值,初始化时,这些值不包含任何值


请务必注意,数组和哈希只能包含标量值,并且只有标量值才能包含数据

两者都可以工作,但就维护而言,最好将它们分开,并用括号()初始化列表,用大括号{}初始化哈希,到目前为止,我的编码约定是: 我的%new_hash_1={}; 我的%new_list_1=()

这样做的好处是,无论谁在以后更新您的代码,都很容易做到这一点

my %new_hash_1 = { 'a' => 1, 'b' => 2 };
并将帮助
严格使用
使用警告
可以更好地了解在将列表用作散列时要执行的操作

我还建议您使用PerlCritic来获取更多用户友好的消息

干杯, 杰尔


ps:请参阅Oreilly Programming Perl()中的hash of hash()

这是不正确的。使用大括号将创建一个散列引用,如果在散列赋值中使用该引用,将在散列赋值中得到错误
奇数个元素。这:
{}
是一个标量值,而不是一个列表
我们的%hash=()。前者可能会保留应用程序先前迭代的数据,具体取决于范围等。我通常确保在初始化哈希或数组时包含空括号,以避免出现问题。
我们的
关键字与
我的
大不相同,是的。它不一定要创建一个新的变量,而且它有“全局”变量的所有缺点,比如你提到的那个。你应该在声明变量时初始化所有变量。这样,你永远不会感到惊讶。@AKHolland,这就是为什么要使用
local-our%散列当您尝试使用包变量模拟词法变量时。在那里,分配一个空列表也同样无用。