【问题标题】:Perl "keys on reference is experimental" warningPerl“参考键是实验性的”警告
【发布时间】:2016-10-11 10:33:58
【问题描述】:

我的 perl 程序发出了一些警告,我还没有运气在 Internet 上搜索解决方案。有什么办法可以重写下面的代码 sn-p 以免引发警告?

"keys on reference is Experimental at...":

foreach my $key ( keys %$api_decoded_result{'query'}->{'pages'} ) {
    @words = split / /, $api_decoded_result->{'query'}->{'pages'}{$key}->{'extract'};
}

【问题讨论】:

  • 即使使用我手头最旧的 Perl 版本 5.14,它实际上也会产生 syntax error at a.pl line 1, near "$api_decoded_result{",因为 %$api_decoded_result{'query'} 没有任何意义。
  • 我认为它在 5.20.2 上是实验性的,但在较新的版本中被删除,因此出现语法错误
  • 不,您在 5.24+ 中从 keys($ref) 得到的错误是 Experimental keys on scalar is now forbidden

标签: perl dictionary hash


【解决方案1】:

是的。这是因为运算符取消引用的优先级。 %$api_decoded_result{'query'} 绑定得更紧密。

keys %{$api_decoded_result{'query'}->{'pages'}}

会做你想做的事。

【讨论】:

  • 我想你忘记了$api_decoded_result{'query'} 之间的->
  • 可能。在不知道 OP 使用什么源数据结构的情况下,我选择了复制它。
  • 实际上他将其视为 hashref 而不是 hash :%$api_decoded_result 似乎旨在访问参考,他在循环内使用 $api_decoded_result->{'query'}... 既然他接受了你的回答,我猜猜没关系,但它很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2017-05-25
  • 2019-08-15
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多