我已经看到了几种在Perl中声明变量的不同方法:
my $scalarVar = ""; my $scalarVar = ''; my $scalarVar = (); my $scalarVar;
my @arrayVar = ""; my @arrayVar = ''; my @arrayVar = (); my @arrayVar;
my %hashVar = ""; my %hashVar = ''; my %hashVar = (); my %hashVar;
使用""
和''
以及()
有什么区别?
答案 0 :(得分:6)
""
和''
评估为空字符串。
在标量上下文中,()
的计算结果为undef
。在惯用语中,当人们知道它将在标量上下文中进行评估时,可以使用undef
而不是()
。
在列表上下文中,()
什么都不做。它用作占位符,表达式是预期的。从概念上讲,它被视为一个空列表。
分配标量时,该值将复制到标量中。
分配给数组时,数组的内容将替换为指定的标量。
分配给散列时,要分配的列表应该是键值对的列表。散列的内容将替换为分配的键值对。
创建时未定义标量,并且数组和散列被创建为空,所以
my $scalarVar = ""; # Creates a scalar containing an empty string.
my $scalarVar = ''; # Creates a scalar containing an empty string.
my $scalarVar = undef; # Creates an undefined scalar. Uselessly noisy code.
my $scalarVar = (); # Creates an undefined scalar. Uselessly noisy and weird code.
my $scalarVar; # Creates an undefined scalar.
my @arrayVar = ""; # Creates an array containing one scalar (an empty string).
my @arrayVar = ''; # Creates an array containing one scalar (an empty string).
my @arrayVar = undef; # Creates an array containing one scalar (undefined).
my @arrayVar = (); # Creates an empty array. Uselessly noisy code.
my @arrayVar; # Creates an empty array.
my %hashVar = ""; # Warns. Makes no sense since a list of k-v pairs expected.
my %hashVar = ''; # Warns. Makes no sense since a list of k-v pairs expected.
my %hashVar = undef; # Warns twice. Makes no sense since a list of k-v pairs expected.
my %hashVar = (); # Creates an empty hash. Uselessly noisy code.
my %hashVar; # Creates an empty hash.
答案 1 :(得分:5)
""
和''
是等效的。有些人使用q()
作为空字符串,因为''
在某些字体中可能看起来像一个"
并且会让读者感到困惑。
my $scalarVar = ()
和my $scalarVar
相同,您可以将my $scalarVar = undef
添加到该论坛。我更喜欢第二种选择,因为它是最短的选择。
my @arrayVar = ''
与my @arrayVar = ('')
相同,即它创建一个包含一个元素的数组,即空字符串。 my @arrayVar = ()
和my @arrayVar
是等效的,它们会创建一个空数组,我再次更喜欢较短的变体。
对于哈希,my %hashVar
和my %hashVar = ()
是等价的(我更喜欢前者)。将空字符串分配给哈希会发出警告:
Odd number of elements in hash assignment at ...
并且相当于
my %hashVar = ( '' => undef );
即。它将undef值存储在空字符串键下。