现在,旧软件中禁止使用标量的实验值:
$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)
$当您需要单个值而不是sigil时,可以使用sigil 取消引用数组@.
尝试使用:
foreach my $field ( values %{ $fields[0] } ) {
....
}
Run Code Online (Sandbox Code Playgroud)