[英]Experimental keys on scalar is now forbidden
我正在尝试调试一个给我错误的 Perl 脚本
现在禁止标量上的实验键
这似乎是我的系统有一个较新版本 perl 的问题,但希望有人可以建议快速修复。
有问题的行是
foreach my $elemName(keys $grammar -> {$groupName})
语法被定义为
my $grammar = {};
和 groupName 来自
foreach my $groupName (keys %$grammar)
我不太了解 perl,所以任何帮助将不胜感激
我对这条线有类似的问题
push($DbRef->{def_param}{$par_descr}->{dataset}, $blkDs);
现在禁止对标量进行错误实验推送......在“$blkDs)”附近
我已经尝试了一些我发现的关于取消引用的解决方案,但语法让我很困惑。
keys EXPR
和push EXPR, LIST
是在 5.14 中作为实验性功能引入的。
keys EXPR
和push EXPR, LIST
在 5.20 开始警告,当时引入了实验性功能的警告概念。
keys EXPR
和push EXPR, LIST
在 5.24 中被删除,因为实验被认为是失败的。 ( keys EXPR
的设计存在根本性缺陷。)
要获取 hash 的密钥,您可以使用keys %NAME
。 您还可以使用 hash 引用,例如keys %BLOCK
或keys EXRP->%*
。
要获取数组的索引,您可以使用keys @NAME
。 您还可以使用数组引用,例如keys @BLOCK
或keys EXRP->@*
。
要将标量推送到数组,您可以使用push @NAME, LIST
。 您还可以使用数组引用,例如push %BLOCK, LIST
或push EXRP->@*, LIST
。
在你的情况下,你想要
keys %{ $grammar -> {$groupName} }
或者
keys $grammar -> {$groupName} -> %* # 5.24+
和
push(@{ $DbRef->{def_param}{$par_descr}->{dataset} }, $blkDs);
或者
push($DbRef->{def_param}{$par_descr}->{dataset}->@*, $blkDs); # 5.24+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.