问题描述
在旧软件中现在禁止标量的实验值:
Experimental values on scalar is now forbidden in old software:
$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]) {
它们都不起作用.知道应该怎么做吗?谢谢.
Non of them works. Any Idea how it should be done? Thx.
这里有更多关于@fields 对象定义的内容:
Here is more on @fields object definition:
[[
'id',
'entry',
'selection',
'status'
]]
推荐答案
这是在 Perl 5.14 中添加但在 5.23 中删除的:
This was added in Perl 5.14 but removed in 5.23:
实验性%s
标量现在被禁止 (F) 实验性Perl 5.14 中添加的功能允许每个、键、推、弹出、移、splice、unshift 和使用标量参数调用的值.这实验被认为不成功,已被删除.这postderef 功能可以更好地满足您的需求.
因此,如果您在引用上使用它,请先取消引用它.有由于您的原始代码,这里有些混乱:
So if you were using it on a reference, dereference it first. There issome confusion arriving here though because of your original code:
foreach my $field ( values @fields[0]) {
这里 @fields[0]
实际上是一个切片,它是有效的,并且有效.但使用严格和警告,你会得到类似的东西:
Here @fields[0]
is actually a slice, which is valid, and works. Butwith strict and warnings you would get something like:
Scalar value @fields[0] better written as $fields[0] at - line x.
事实上,如果您正在访问一个项目(比如一个参考,可能在您的case) 你应该使用 $fields[0]
代替.所以首先更正一下,然后取消引用以符合 values
的标准要求(作为一个列表.它只接受标量作为实验特征过去).
In fact, if you're accessing an item (like a reference, probably in yourcase) you should be using $fields[0]
instead. So first correct that,and then dereference to conform to the standard requirement for values
(being a list. It accepted a scalar only as an experimental feature inthe past).
foreach my $field ( values %{$fields[0]})
这篇关于现在禁止标量的实验值 - perl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!