繁体   English   中英

在Perl中打印哈希值

[英]Printing hash value in Perl

当我打印一个变量时,我得到一个HASH(0xd1007d0)值。 我需要打印所有键和值的值。 但是,我无法作为控件未进入循环。

foreach my $var(keys %{$HashVariable}){
    print"In the loop \n";
    print"$var and $HashVariable{$var}\n";

}

但是控件甚至没有进入循环。 我是perl的新手。

我无法完全回答,因为这完全取决于$HashVariable

告诉其中的最简单方法是:

use Data::Dumper;
print Dumper $HashVariable;

假设这是一个哈希引用 -如果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";
}

您犯的唯一错误是$HashVariable{$key}无法正常工作-您需要取消引用,因为按目前情况,它引用的是%HashVariable而不是$HashVariable ,这是两个完全不同的东西。

否则-如果未进入循环-可能意味着keys %$HashVariable不返回任何内容。 这就是Dumper测试有用的原因-您是否有可能没有正确填充它,或者正在 %HashVariable

例如:

my %HashVariable;
$HashVariable{'test'} = "foo";

这里有一个明显的问题,但这不会导致您看到的行为。

您认为在$HashVariable有一个哈希引用,并且在打印时看到的HASH(0xd1007d0)输出听起来是正确的。

但是设置哈希引用并运行您的代码会产生一些奇怪的结果:

my $HashVariable = {
  foo => 1,
  bar => 2,
  baz => 3,
};

foreach my $var(keys %{$HashVariable}){
    print"In the loop \n";
    print"$var and $HashVariable{$var}\n";
}

我得到的输出是:

In the loop 
baz and 
In the loop 
bar and 
In the loop 
foo and 

请注意,这些值没有被打印出来。 那是因为我上面提到的问题。 在程序中添加use strict (您应该始终这样做)可以告诉我们问题出在哪里。

Global symbol "%HashVariable" requires explicit package name (did you forget to declare "my %HashVariable"?) at hash line 14.
Execution of hash aborted due to compilation errors.

您正在使用$HashVariable{$var}查找哈希中的键。 如果您有一个名为%HashVariable的哈希,那将是正确的,但是您没有-您有一个名为$HashVariable的哈希引用(请注意$而不是% )。 要从哈希引用中查找键,您需要使用一个解引用箭头- $HashVariable->{$var}

解决此问题,您的程序将按预期工作。

use strict;
use warnings;

my $HashVariable = {
  foo => 1,
  bar => 2,
  baz => 3,
};

foreach my $var(keys %{$HashVariable}){
    print"In the loop \n";
    print"$var and $HashVariable->{$var}\n";
}

我看到:

In the loop 
bar and 2
In the loop 
foo and 1
In the loop 
baz and 3

获得描述的结果( HASH(0xd1007d0)输出,但没有循环迭代HASH(0xd1007d0)的唯一方法是,如果您具有哈希引用,但哈希没有键。

因此(正如我在评论中所说),我们需要查看如何创建哈希引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM