emm*_*mma 2 perl hash foreach loops key-value
当我打印变量时,我得到一个HASH(0xd1007d0)值。我需要打印所有键和值的值。但是,我无法这样做,因为控件没有进入循环。
foreach my $var(keys %{$HashVariable}){
print"In the loop \n";
print"$var and $HashVariable{$var}\n";
}
Run Code Online (Sandbox Code Playgroud)
但控制甚至没有进入循环。我是 Perl 新手。
我无法完全回答,因为这完全取决于$HashVariable.
判断里面有什么的最简单方法是:
use Data::Dumper;
print Dumper $HashVariable;
Run Code Online (Sandbox Code Playgroud)
假设这是一个散列引用- 如果作为输出print $HashVariable给出,那么它HASH(0xdeadbeef)就是散列引用。
所以这应该有效:
#!/usr/bin/env perl
use strict;
use warnings;
my $HashVariable = { somekey => 'somevalue' };
foreach my $key ( keys %$HashVariable ) {
print $key, " => ", $HashVariable->{$key},"\n";
}
Run Code Online (Sandbox Code Playgroud)
你犯的唯一错误是那$HashVariable{$key}不起作用 - 你需要取消引用,因为就目前情况而言,它指的是%HashVariablenot $HashVariable,这是两个完全不同的东西。
否则 - 如果它没有进入循环 - 这可能意味着keys %$HashVariable没有返回任何内容。这就是为什么该Dumper测试会很有用 - 是否有可能您没有正确填充它,或者您正在写入%HashVariable。
例如:
my %HashVariable;
$HashVariable{'test'} = "foo";
Run Code Online (Sandbox Code Playgroud)