在 Perl 中打印哈希值

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 新手。

Sob*_*que 5

我无法完全回答,因为这完全取决于$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)