在Perl 5.26.1中,我得到:
现在,/ funcx.pm第110行禁止使用标量上的实验值。
第110行是
中的foreachsub checkSsh {
foreach my $slave (values $::c{slaves}) {
...
}
}
$c
包含
$VAR1 = {
'slaves' => {
'48' => '10.10.10.48'
},
};
,其中
our %c = %{YAML::Syck::LoadFile($config)};
问题
究竟是什么问题?它应该如何修复?
答案 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