7

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

所以我想要的是这样做:

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

但是传入的是 hashref 而不是散列。

4

5 回答 5

3

我目前还没有真正测试过代码,但是徒手写你会想做这样的事情:

sub foo {
    $parms = shift;
    foreach my $key (keys %$parms) { # do something };
}
于 2010-02-17T17:40:36.263 回答
2

这是取消引用传递给子的哈希引用的一种方法:

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

于 2010-02-17T17:44:09.463 回答
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);

这里还有一个关于参考的很好的介绍。

于 2010-02-17T17:45:40.673 回答
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";
    };
}
于 2010-02-18T00:12:21.110 回答
0

取消引用原始引用,但将其用作另一个/它的副本,这也是非常常见或更常见的。

sub foo {
    my ($parmsHashRef , $parmsArrRef) = @_;

    # for hashes,   \%$parmsHashRef - would not work (seems would be a "reference" on another reference already)
    my $newDetachedHashRef = {%$parmsHashRef} # or just = {$parmsHashRef}
    # for arrays ,  \@$parmsArrRef - would not work
    my $newDetachedArrRef = [@$parmsArrRef] # or just = [$parmsArrRef]
}
于 2021-12-07T10:27:34.490 回答