2015-07-06 2 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"; 
} 

ключи% хэш возвращает список ключей в% хэш (есть также значения% хэш), то для доступа к значению, сохраненному в хэш используется $ хэш {$ ключ}

Смежные вопросы