将哈希传递给子程序

abh*_*ier 1 perl hash subroutine

嗨,我是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);
Run Code Online (Sandbox Code Playgroud)

此代码的输出将是

姓名:汤姆年龄:19岁

我理解了如何解析密钥,但我无法理解这些值如何被解析.当我尝试理解程序的流程时,这一行负责解析值.

my $value = $hash{$key};
Run Code Online (Sandbox Code Playgroud)

谁能简单解释一下发生了什么?如果我的理解是错误的,请纠正我.

小智 5

PrintHash(%hash);
Run Code Online (Sandbox Code Playgroud)

列表上下文中的散列是散列中包含的键值对的列表.您可以写相同的行:

PrintHash(qw(name Tom age 19));
Run Code Online (Sandbox Code Playgroud)

要么

PrintHash('age', '19', 'name', 'Tom');
Run Code Online (Sandbox Code Playgroud)

顺序无关紧要,但保留了对.然后将该列表分配给sub的第一行的新哈希

my %hash = @_;
Run Code Online (Sandbox Code Playgroud)

您可以从列表(键,值,键,值,...)初始化哈希

子例程的其余部分遍历哈希并打印键值对.

foreach my $key ( keys %hash ){
    my $value = $hash{$key};
    print "$key : $value\n";
}
Run Code Online (Sandbox Code Playgroud)

keys%hash返回%hash中的键列表(也有值%hash),然后访问存储在哈希中的值你使用$ hash {$ key}