我是perl的新手,我很难理解哈希引用,我对某个概念/问题略有不满:
我可以使用什么代码将变量$ red设置为哈希引用$ hash中key $ color的值?
这只是一个更复杂问题的简单版本。 谢谢您的帮助。
答案 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中查看perlreftut,perlref和perldsc。
答案 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}
你可能会在旧的(或新的,写得不好的)代码中看到这些
我希望有帮助吗?