空哈希声明

时间:2014-12-18 13:13:07

标签: perl variables variable-declaration

我从来不知道以下之间的区别,如果有的话:

my %hash;
my %hash = ();

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:5)

在某些语言中,未初始化提供了新变量。在Perl中,标量创建未定义,数组和散列被创建为空。

第二个是浪费。将空列表分配给空哈希无效。

答案 1 :(得分:4)

你说得对。没有区别。声明散列(或数组)会创建一个空数据结构。

这与标量声明略有不同 - 标量可以声明但未定义。这对于散列或数组来说没有意义,所以没有区别。

use Data::Dumper;

my $scalar;
my $scalar2 = '';

print Dumper \$scalar;
print Dumper \$scalar2;

my %hash;
my %hash2 = ();
print Dumper \%hash;
print Dumper \%hash2;

my @array;
my @array2 = ();

print Dumper \@array;
print Dumper \@array2;

如果您查看defined文档,就会看到:

“弃用了聚合(哈希和数组)上定义的使用。它用于报告是否曾分配过该聚合的内存。在未来的Perl版本中,这种行为可能会消失。您应该使用简单的大小测试:“