旧软件中禁止使用标量的实验值:
$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]) {
不是他们的作品。任何想法应该怎么做? THX。
以下是关于@fields对象定义的更多内容:
[[
'id',
'entry',
'selection',
'status'
]]
答案 0 :(得分:13)
这是在Perl 5.14中添加的,但在5.23中删除了
标量上的实验
%s
现在被禁止(F)实验 Perl 5.14中添加的功能允许每个,键,推,弹出,移位, splice,unshift和要用标量参数调用的值。这个 实验被认为是不成功的,并已被删除。该 postderef功能可以更好地满足您的需求。
因此,如果您在引用中使用它,请先取消引用它。有 由于你的原始代码,到达这里有些困惑:
foreach my $field ( values @fields[0]) {
这里@fields[0]
实际上是一个切片,它是有效的,并且有效。但
严格和警告你会得到类似的东西:
Scalar value @fields[0] better written as $fields[0] at - line x.
事实上,如果你正在访问某个项目(比如参考,可能是你的
case)你应该使用$fields[0]
代替。所以首先纠正一下,
然后取消引用以符合values
的标准要求
(作为一个列表。它仅接受标量作为实验特征
过去)。
foreach my $field ( values %{$fields[0]})
答案 1 :(得分:7)
如果需要单个值而不是$
sigil,则使用@
sigil取消引用数组。
尝试使用:
foreach my $field ( values %{ $fields[0] } ) {
....
}
答案 2 :(得分:0)
我没有经过测试,但基于AoA参考的书面定义,我认为:
foreach my $field ( @{ $fields[0] } ) {...}