2015-07-06 46 views
1

嗨,我是新的perl編程..我無法得到這段代碼片段。這段代碼的傳遞哈希到子程序

#!/usr/bin/perl 

# Function definition 
sub PrintHash{ 
    my (%hash) = @_; 

    foreach my $key (keys %hash){ 
     my $value = $hash{$key}; 
     print "$key : $value\n"; 
    } 
} 
%hash = ('name' => 'Tom', 'age' => 19); 

# Function call with hash parameter 
PrintHash(%hash); 

輸出將

名:湯姆 年齡:19

我明白瞭如何密鑰被解析,但我不能夠得到的想法背後的值是如何解析的。當我嘗試瞭解程序的流程時,這一行負責解析值。

my $value = $hash{$key}; 

任何人都可以簡單地解釋發生了什麼?如果我的理解錯誤,請糾正我。

回答

5
PrintHash(%hash); 

列表上下文中的散列是包含在散列中的鍵值對列表。你可以寫在同一行:

PrintHash(qw(name Tom age 19)); 

PrintHash('age', '19', 'name', 'Tom'); 

的順序並不重要,但對被保留。 然後你在子的第一行列表分配給新的散列

my %hash = @_; 

您可以從列表中初始化一個哈希(鍵,值,鍵,值,...)

的子例程的其餘部分迭代散列並打印鍵值對。

foreach my $key (keys %hash){ 
    my $value = $hash{$key}; 
    print "$key : $value\n"; 
} 

鍵%哈希返回鍵列表%哈希(也有值%哈希),然後訪問存儲在哈希你使用$哈希{$ key}的