2016-05-13 85 views
-2

我已經看到了幾種不同的方式在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; 

有什麼用""''()之間的區別?

回答

7

""''評估爲空字符串。

在標量環境下,()評估爲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. 
+0

明白了,非常感謝。 – ssr1012

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值。

+0

謝謝...你岩石。 – ssr1012

相關問題