理解哈希引用

时间:2017-05-23 14:06:45

标签: perl hash reference

我是perl的新手,我很难理解哈希引用,我对某个概念/问题略有不满:

我可以使用什么代码将变量$ red设置为哈希引用$ hash中key $ color的值?

这只是一个更复杂问题的简单版本。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:5)

这非常简单。您可以通过使用大括号{}来告诉Perl您想要一个哈希元素,并使用箭头操作符->来告诉它取消引用,从而访问哈希引用中的元素。 sigil是一个美元符号$,因为您获得的值为scalar,这意味着它是一个原子值。

use strict;
use warnings;

my $hash = {
    red   => 'ff0000',
    green => '00ff00',
    blue  => '0000ff',
};

my $color = 'red';
my $red   = $hash->{$color};

print $red;

打印

ff0000

您应该在perldoc中查看perlreftutperlrefperldsc

答案 1 :(得分:2)

希望您知道如何访问普通哈希,例如

my %data = ( red => 'a', blue => 'b', green => 'c' );

不需要在颜色名称周围加引号,因为" fat逗号" =>为我们做了

(我不喜欢%hash作为哈希的名称,因为%告诉我们它是哈希值。)

设置

my $color = 'blue';

现在,您可以使用

访问哈希的blue元素
$data{$color}

最初的美元$存在,因为访问单个哈希元素的结果是标量,而Perl标量以美元开头。该表达式的值是字符串b

您也可以将其写为

${data}{$color}

具有完全相同的结果。这可能看起来不太有用,但请耐心等待:这将是一个很好的 aide-memoire

现在,我们可以设置一个(标量)变量$hash作为对哈希%data的引用

my $hash = \%data;

我们可以通过用包含引用的变量替换哈希data名称来访问与以前相同的元素。所以

${data}{$color}

现在与

相同
${$hash}{$color}

它也与

相同
$$hash{$color}

但是现在我们正在处理数据引用,但这意味着什么远不那么明显。您可以坚持使用${$hash}{$color},也可以使用较新的箭头操作符并编写

$hash->{$color}

这是一般推荐和最不明确的语法

现在,你的问题是(转述)

  

如何将变量$red设置为$hash引用的哈希中的值,其密钥为$color

虽然使用$red作为变量名称非常令人困惑,但我会继续使用它!

你想要

my $red = $hash->{$color}

使用上述值,$red现在将包含字符串b。如果您对此感到满意,请继续阅读

可以进行相同的分配

my $red = ${$hash}{$color}

或更糟糕

my $red = $$hash{$color}

你可能会在旧的(或新的,写得不好的)代码中看到这些

我希望有帮助吗?