![](/img/trans.png)
[英]how to solve the “Experimental values on scalar is now forbidden” problem in perl
[英]Experimental values on scalar is now forbidden - perl
现在,旧软件中禁止使用标量的实验值:
$link = Winners::Links->new();
my @fields = $link->column_names;
foreach my $field ( values @fields[0]) {
我试图做:
foreach my $field ( values {@fields[0]}) {
foreach my $field ( values %{@fields[0]}) {
foreach my $field ( values %@fields[0]) {
不是他们的作品。 任何想法应该怎么做? 谢谢。
以下是@fields对象定义的更多内容:
[[
'id',
'entry',
'selection',
'status'
]]
这是在Perl 5.14中添加的,但在5.23中删除了:
现在禁止在标量上实验
%s
(F)在Perl 5.14中添加的实验特性允许使用标量参数调用每个,键,推,弹,移位,拼接,非移位和值。 该实验被认为是不成功的,并已被删除。 postderef功能可以更好地满足您的需求。
因此,如果您在引用上使用它,请首先取消引用它。 由于您的原始代码,这里有一些混乱:
foreach my $field ( values @fields[0]) {
这里@fields[0]
实际上是一个切片,它是有效的,并且有效。 但是通过严格和警告,你会得到类似的东西:
Scalar value @fields[0] better written as $fields[0] at - line x.
事实上,如果你正在访问一个项目(比如参考,可能在你的情况下),你应该使用$fields[0]
。 因此,首先要纠正这个问题,然后取消引用以符合标准的values
要求(作为列表。它仅接受标量作为过去的实验性功能)。
foreach my $field ( values %{$fields[0]})
你去参考使用数组$
印记,当你需要一个单独的值,而不是@
印记。
尝试使用:
foreach my $field ( values %{ $fields[0] } ) {
....
}
我没有测试过,但基于AoA参考的书面定义,我认为:
foreach my $field ( @{ $fields[0] } ) {...}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.