以链接方式使用哈希让我很困惑。例如,我阅读了以下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
答案 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”元素。
关于你的上一个问题,是的,因为你两次写了同样的东西。