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%散列代码>当您尝试使用包变量模拟词法变量时。在那里,分配一个空列表也同样无用。