perl:从包含对它的引用的哈希中打印一个字符串

时间:2017-05-25 17:59:38

标签: perl

对不起,如果这是一个糟糕的标题。

我有以下哈希:

my %map = (
    'key1', 'hello',
    'key2', \'there'
);
print Dumper(\%map);

输出:

$VAR1 = {
    'key2' => \'there',
    'key1' => 'hello'
};

我想打印'key2'处的值。以下是我尝试过的内容:

print "$map{key2}" => SCALAR(0x2398b08)
print "$$map{key2}" =>
print "$map->{key2}" =>

我的目标:

print [some magic thing] => there

我是perl的新手,所以我还没有100%明白引用的行为以及如何取消引用它们。我如何得到我正在寻找的东西?

3 个答案:

答案 0 :(得分:5)

$map{key2}返回所需元素的值。元素是对字符串的引用。 [1] 如果要打印该引用引用的字符串,则需要取消引用它。

say ${ $map{key2} };

参考文献:

  1. 我怀疑这是故意的!这肯定表明某处出现了错误。

答案 1 :(得分:4)

$map{key2}是对标量值\'there'的引用,因此您需要取消引用它

您的$$map{key2}$map->{key2}都将$map视为对哈希的引用,但它甚至不存在,所以这是错误的< / p>

您必须使用大括号来消除评估顺序的歧义

${ $map{key2} }

是你想要的。或者您可以分两步编写

my $val = $map{key2};
print $$val, "\n";

答案 2 :(得分:-2)

我想在我的所有perl脚本中添加以下行:
use strict;
这将使您免于变量范围的麻烦。它确实要求您将所有变量的范围至少设置为“my”。

以下将允许您直接打印(与“key2”关联的哈希值)的值,
没有中间步骤,首先将其复制到另一个变量。

print ${$map{'key2'}}, "\n";