在声明变量时使用“”和“”和()有什么区别?

时间:2016-05-13 14:40:24

标签: perl

我已经看到了几种在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;

使用""''以及()有什么区别?

2 个答案:

答案 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 %hashVarmy %hashVar = ()是等价的(我更喜欢前者)。将空字符串分配给哈希会发出警告:

Odd number of elements in hash assignment at ...

并且相当于

my %hashVar = ( '' => undef );

即。它将undef值存储在空字符串键下。