如何修复"标量的实验值现在被禁止"

时间:2018-04-19 13:32:23

标签: perl

在Perl 5.26.1中,我得到:

  

现在,/ funcx.pm第110行禁止使用标量上的实验值。

第110行是

中的foreach
sub checkSsh {
    foreach my $slave (values $::c{slaves}) {
      ...
    }
}

$c包含

$VAR1 = {
          'slaves' => {
                        '48' => '10.10.10.48'
                      },
        };

,其中

our %c = %{YAML::Syck::LoadFile($config)};

问题

究竟是什么问题?它应该如何修复?

1 个答案:

答案 0 :(得分:6)

Perl抱怨你在SCALAR上调用内置values,在这种情况下是HASHREF:

正确取消引用您的slaves密钥,values可以按预期方式工作:

foreach my $slave ( values %{ $c{slaves} } ) {
  ...
}

关于您收到的具体警告,他们直接在perldoc页面中说明:

  

从Perl 5.14开始,一个实验性功能允许值   采取标量表达。该实验已被视为   不成功,从Perl 5.24开始删除。

     

避免混淆您之前运行的代码的潜在用户   Perl的版本带有神秘的语法错误,就是这样的事情   在文件的顶部,表示您的代码仅适用于您的代码   最近年份的Perls:

use 5.012;  # so keys/values/each work on arrays