繁体   English   中英

现在禁止标量的实验值 - 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM