对不起,如果这是一个糟糕的标题。
我有以下哈希:
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%明白引用的行为以及如何取消引用它们。我如何得到我正在寻找的东西?
答案 0 :(得分:5)
$map{key2}
返回所需元素的值。元素是对字符串的引用。 [1] 如果要打印该引用引用的字符串,则需要取消引用它。
say ${ $map{key2} };
参考文献:
答案 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";