[英]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.