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

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

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

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

но с hashref передается вместо a хэш.

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

спасибо.

4 ответов


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

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

вот один из способов разыменования хэш-ссылки, переданной 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



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

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

foo($hash_ref);

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


#!/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";
    };
}