我从来不知道以下之间的区别,如果有的话:
my %hash;
my %hash = ();
有人可以对此有所了解吗?
答案 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版本中,这种行为可能会消失。您应该使用简单的大小测试:“