现在禁止标量的实验值 - perl

bus*_*usy 5 perl

现在,旧软件中禁止使用标量的实验值:

$link = Winners::Links->new();
my @fields = $link->column_names;     
foreach my $field ( values @fields[0]) {
Run Code Online (Sandbox Code Playgroud)

我试图做:

 foreach my $field ( values {@fields[0]}) {

 foreach my $field ( values %{@fields[0]}) {

 foreach my $field ( values %@fields[0]) {
Run Code Online (Sandbox Code Playgroud)

不是他们的作品.任何想法应该怎么做?谢谢.

以下是@fields对象定义的更多内容:

[[
  'id',
  'entry',
  'selection',
  'status'
]]
Run Code Online (Sandbox Code Playgroud)

sid*_*yll 16

这是在Perl 5.14中添加的,但在5.23中删除了:

实验 %s上标量正在被禁止(F)在各允许,钥匙,压入,弹出,移位,剪切,不印字,和值的Perl 5.14添加的实验特征与一个标量参数来调用.该实验被认为是不成功的,并已被删除.postderef功能可以更好地满足您的需求.

因此,如果您在引用上使用它,请首先取消引用它.由于你的原始代码,这里有一些混乱:

foreach my $field ( values @fields[0]) {
Run Code Online (Sandbox Code Playgroud)

@fields[0] 实际上是一个切片,它是有效的,并且有效.但是通过严格和警告,你会得到类似的东西:

Scalar value @fields[0] better written as $fields[0] at - line x.
Run Code Online (Sandbox Code Playgroud)

事实上,如果你正在访问一个项目(比如参考,可能在你的情况下),你应该使用它$fields[0].因此,首先要纠正这一点,然后取消引用以符合标准要求values (作为列表.它仅接受标量作为过去的实验特征).

foreach my $field ( values %{$fields[0]})
Run Code Online (Sandbox Code Playgroud)


Hun*_*len 7

$当您需要单个值而不是sigil时,可以使用sigil 取消引用数组@.

尝试使用:

foreach my $field ( values %{ $fields[0] } ) {
  ....
}
Run Code Online (Sandbox Code Playgroud)