Perl 如何取消对';它被传递给了一个子程序?

Perl 如何取消对';它被传递给了一个子程序?,perl,hash,dereference,Perl,Hash,Dereference,我仍在努力解决散列解引用问题。我当前的问题是,我正在将hashref传递给sub,我想在该sub中取消对它的引用。但我找不到正确的方法/语法来执行此操作。在sub中,我想迭代散列键,但是hashref的语法与散列不同,我知道如何做 所以我想做的是: sub foo { %parms = @_; foreach $keys (key %parms) { # do something }; } 但是传入的是hashref而不是hash 欢迎任何指点(非双关语) 谢谢。我现在还没有实

我仍在努力解决散列解引用问题。我当前的问题是,我正在将hashref传递给sub,我想在该sub中取消对它的引用。但我找不到正确的方法/语法来执行此操作。在sub中,我想迭代散列键,但是hashref的语法与散列不同,我知道如何做

所以我想做的是:

sub foo {
    %parms = @_;
    foreach $keys (key %parms) { # do something };
}
但是传入的是hashref而不是hash

欢迎任何指点(非双关语)


谢谢。

我现在还没有实际测试代码,但是写意你会想做这样的事情:

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

以下是取消引用传递给子对象的哈希引用的一种方法:

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
另见和


关于引用的另一个很好的介绍是。

使用shift而不是@u完成了这个技巧,当然,对于变量使用标量而不是哈希。工作代码:sub foo{$parms=shift;foreach$key(keys%$parms){print“$key:$$parms{$key}\n”;}}谢谢<代码>移位与
@
不相关<代码>我的($hashref)=@也可以。谢谢你的链接。我一直在用它作为参考,但我还没有完全掌握它。Eep,直到现在才看到工具学回复;xI会说他的命名更好(将hashref命名为href)。

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";
    };
}