Как разыменовать ссылку на хэш Perl, которая была передана подпрограмме? - PullRequest
6 голосов
/ 17 февраля 2010

Я все еще пытаюсь разобраться в разыменовании моего хэша.Моя текущая проблема заключается в том, что я передаю хэш-ссылку в подпрограмму, и я хочу разыменовать ее в этой подпрограмме.Но я не нахожу правильный метод / синтаксис для этого.Внутри подпрограммы я хочу перебрать хеш-ключи, но синтаксис для хеш-ссылки не совпадает с хеш-кодом, и я знаю, как это сделать.

Итак, я хочу сделать это:

sub foo {
    %parms = @_;
    foreach $keys (key %parms) { # do something };
}

но с хеш-рефом вместо хеша.

Любые указатели (каламбур не предназначен) приветствуются.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 17 февраля 2010

Я на самом деле не тестировал код на данный момент, но, написав от руки, вы захотите сделать что-то вроде этого:

sub foo {
    $parms = shift;
    foreach my $key (keys %$parms) { # do something };
}
2 голосов
/ 17 февраля 2010

sub foo
{
    my $params = $_[0];
    my %hash = %$params;
        foreach $keys (keys %hash)
        {
         print $keys;
        }
}

my $hash_ref = {name => 'Becky', age => 23};

foo($hash_ref);

Также хорошее представление о ссылках: здесь .

2 голосов
/ 17 февраля 2010

Вот один из способов разыменования ссылки на хеш, переданной в sub:

use warnings;
use strict;

my %pars = (a=>1, b=>2);
foo(\%pars);
sub foo {
    my ($href) = @_;
    foreach my $keys (keys %{$href}) { print "$keys\n" }
}

__END__
a
b

См. Также Краткое руководство по ссылкам и perlreftut

1 голос
/ 18 февраля 2010
#!/usr/bin/perl
use strict;

my %params = (
    date => '2010-02-17',
    time => '1610',
);

foo(\%params);

sub foo {
    my ($params) = @_;
    foreach my $key (keys %$params) {
        # Do something
        print "KEY: $key VALUE: $params{$key}\n";
    };
}
...