Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 以链接方式使用哈希_Perl - Fatal编程技术网

Perl 以链接方式使用哈希

Perl 以链接方式使用哈希,perl,Perl,以链接方式使用散列让我很困惑。例如,我阅读了以下Perl代码,如何逐段理解它们 $model->{result}->{forcast}->[$index]->{label} = 1; $Neg{$examples->{result}->[$index]->{title}} = 1 另外,为什么有些项目有$,比如$索引;而其他人则没有,比如标签 $index包装在[]中,而其他的包装在{}中,这里有什么区别 $Neg{$examples->{resu

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

$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'
是相同的


是数据结构的食谱。在查看此类数据结构时非常有用。

省略哈希键的引号没有什么错。只要密钥不包含任何空格,它就可以正常工作。除非您使用警告,这是最佳实践。如果你没有使用警告,那么你就是一个坏人。使用无引号的散列键没有警告。无引号的标识符作为散列键是完全可以的。没有严格的错误。没有警告。不,不是很好。虽然它可以工作并且不会触发警告,但额外的视觉提示非常值得包含引号。