在Perl 5.26.1中,我得到:
现在,在/funcx.pm第110行禁止标量的实验值.
第110行是foreach in
sub checkSsh {
foreach my $slave (values $::c{slaves}) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
$c 包含
$VAR1 = {
'slaves' => {
'48' => '10.10.10.48'
},
};
Run Code Online (Sandbox Code Playgroud)
哪里
our %c = %{YAML::Syck::LoadFile($config)};
Run Code Online (Sandbox Code Playgroud)
题
究竟是什么问题?它应该如何修复?
Perl抱怨你values在SCALAR上调用内置函数,在本例中是一个HASHREF:
正确取消引用您的slaves密钥可以values按预期工作:
foreach my $slave ( values %{ $c{slaves} } ) {
...
}
Run Code Online (Sandbox Code Playgroud)
至于您收到的具体警告,它们直接在perldoc页面中解决:
从Perl 5.14开始,一个实验性功能允许值采用标量表达式.该实验被认为是不成功的,并且从Perl 5.24开始被删除.
为了避免让运行早期版本Perl的代码的潜在用户感到困惑,并且出现了神秘的语法错误,请将这类内容置于文件的顶部,以表明您的代码仅适用于最近一个年份的Perls:
Run Code Online (Sandbox Code Playgroud)use 5.012; # so keys/values/each work on arrays