我仍在尝试解决我的哈希解除引用问题。我目前的问题是我现在将hashref传递给sub,我想在该sub中取消引用它。但我找不到正确的方法/语法来做到这一点。在sub中,我想迭代哈希键,但hashref的语法与哈希相同,我知道该怎么做。
所以我想要的是这样做:
sub foo {
%parms = @_;
foreach $keys (key %parms) { # do something };
}
但传入hashref而不是散列。
欢迎任何指针(双关语)。
感谢。
答案 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
答案 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";
};
}