以链接方式使用哈希

时间:2011-12-19 04:11:14

标签: perl

以链接方式使用哈希让我很困惑。例如,我阅读了以下Perl代码,如何逐一理解它们?

$model->{result}->{forcast}->[$index]->{label}  = 1;

$Neg{$examples->{result}->[$index]->{title}} = 1

另外,为什么有些商品有$,比如$ index;而其他人则没有,比如标签。

$ index包含在[]中,而其他包含在{}中,这里有什么区别?

$Neg{$examples->{result}->[$index]->{title}} = 1是否等同于$Neg{$examples->{result}->[$index]->{title}} = 1

2 个答案:

答案 0 :(得分:6)

考虑:

$model->{result}->{forcast}->[$index]->{label}  = 1;

->[]用于取消引用数组引用 ->{}用于取消引用哈希引用。

让我们从左边扫描一下:

  • $model是哈希引用(由于它在上下文中使用:$model->{}
  • result是一个哈希键(因为它没有预先设置$ sigil)
  • $model->{result}又是哈希引用
  • $model->{result}->{forcast}是一个数组引用(由于它在上下文中使用:$model->{result}->{forcast}->[]
  • $index是用户设置的变量,可能包含数组项的索引
  • $model->{result}->{forcast}->[$index]是哈希引用
  • label是一个哈希键
  • $model->{result}->{forcast}->[$index]->{label}1设置为哈希键的值

哈希键可以是裸字,将自动引用。因此,将散列键指定为result'result'是相同的。

perldoc perldsc是数据结构的食谱。 Data::Dumper在查看此类数据结构方面非常有用。

答案 1 :(得分:-4)

你不应该有没有引号的纯文本哈希键。这样说:

$model->{'result'}->{'forcast'}->[$index]->{'label'} = 1

所以模型是一个hashref,它有一个键'result'是一个hashref,它有一个键'forcast'(不能拼写?),这是一个arrayref,它在索引$index有一个hashref,其密钥'label'设置为1。

在第二个中,%Neg是一个哈希,其密钥是嵌套哈希和数组链中的“title”元素。

关于你的上一个问题,是的,因为你两次写了同样的东西。