如何取消引用已传递给子例程的Perl哈希引用?

时间:2010-02-17 17:36:48

标签: perl hash dereference

我仍在尝试解决我的哈希解除引用问题。我目前的问题是我现在将hashref传递给sub,我想在该sub中取消引用它。但我找不到正确的方法/语法来做到这一点。在sub中,我想迭代哈希键,但hashref的语法与哈希相同,我知道该怎么做。

所以我想要的是这样做:

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

但传入hashref而不是散列。

欢迎任何指针(双关语)。

感谢。

4 个答案:

答案 0 :(得分:3)

我此时并没有真正测试过这段代码,但是徒手写作你会想要做这样的事情:

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

答案 1 :(得分:2)

这是解除传递给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

另请参阅References quick referenceperlreftut

答案 2 :(得分:2)


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

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

foo($hash_ref);

关于参考文献的一个很好的介绍是here

答案 3 :(得分:1)

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