Perl 以链接方式使用哈希
以链接方式使用散列让我很困惑。例如,我阅读了以下Perl代码,如何逐段理解它们Perl 以链接方式使用哈希,perl,Perl,以链接方式使用散列让我很困惑。例如,我阅读了以下Perl代码,如何逐段理解它们 $model->{result}->{forcast}->[$index]->{label} = 1; $Neg{$examples->{result}->[$index]->{title}} = 1 另外,为什么有些项目有$,比如$索引;而其他人则没有,比如标签 $index包装在[]中,而其他的包装在{}中,这里有什么区别 $Neg{$examples->{resu
$model->{result}->{forcast}->[$index]->{label} = 1;
$Neg{$examples->{result}->[$index]->{title}} = 1
另外,为什么有些项目有$,比如$索引;而其他人则没有,比如标签
$index包装在[]中,而其他的包装在{}中,这里有什么区别
$Neg{$examples->{result}->[$index]->{title}}=1
等同于$Neg{$examples->{result}->[$index]->{title}}=1
不应该有没有引号的纯文本哈希键。说:
$model->{'result'}->{'forcast'}->[$index]->{'label'} = 1
所以模型是一个hashref,它有一个键'result',它是一个hashref,它有一个键'forcast'(不能拼写?),它是一个arrayref,它在index$index
有一个hashref,它有一个键'label',它被设置为1
在第二个函数中,%Neg
是一个散列,其键是嵌套散列和数组链中的“title”元素
至于你的最后一个问题,是的,因为你写了两次同样的东西。考虑一下:
$model->{result}->{forcast}->[$index]->{label} = 1;
->[]
用于取消对数组引用的引用。->{}
用于取消对哈希引用的引用
让我们从左边扫描它:
是一个哈希引用(因为它在上下文中使用:$model
)$model->{}
是一个散列键(因为它没有result
sigil前缀)$
还是一个哈希引用$model->{result}
是一个数组引用(因为它在上下文中使用:$model->{result}->{forcast}
)$model->{result}->{forcast}->[]
是用户设置的变量,可能包含数组项的索引$index
是一个哈希引用$model->{result}->{forcast}->[$index]
是一个哈希键标签
将$model->{result}->{forcast}->[$index]->{label}
设置为哈希键的值1
result
或'result'
是相同的
是数据结构的食谱。在查看此类数据结构时非常有用。省略哈希键的引号没有什么错。只要密钥不包含任何空格,它就可以正常工作。除非您使用警告,这是最佳实践。如果你没有使用警告,那么你就是一个坏人。使用无引号的散列键没有警告。无引号的标识符作为散列键是完全可以的。没有严格的错误。没有警告。不,不是很好。虽然它可以工作并且不会触发警告,但额外的视觉提示非常值得包含引号。