perl 标量上的实验键现在被禁止

vngu2lb8  于 2023-02-05  发布在  Perl
关注(0)|答案(1)|浏览(147)

我正在尝试调试一个Perl脚本,该脚本给了我以下错误
标量上的实验键现在被禁止
这似乎是一个问题,我的系统有一个较新版本的Perl,但希望一些人可以建议一个快速修复。
问题是

foreach my $elemName(keys $grammar -> {$groupName})

语法定义为

my $grammar = {};

组名来自

foreach my $groupName (keys %$grammar)

我对perl了解不多,所以任何帮助都将不胜感激
我也有类似的问题

push($DbRef->{def_param}{$par_descr}->{dataset}, $blkDs);

带有错误现在禁止对标量进行实验性推送...靠近"$blkDs)"
我已经尝试了一些我发现的解引用的解决方案,但是语法对我来说非常混乱。

x3naxklr

x3naxklr1#

keys EXPRpush EXPR, LIST在5.14中作为实验特性引入。
keys EXPRpush EXPR, LIST在5.20引入实验特性警告概念时开始警告。
keys EXPRpush EXPR, LIST在5.24中被删除,因为实验被视为失败。(keys EXPR的设计存在根本缺陷。)
要获取hash的密钥,可以使用keys %NAME,也可以使用hash的延迟,例如keys %BLOCKkeys EXRP->%*
要获取数组的索引,可以使用keys @NAME。也可以使用数组的派生,例如keys @BLOCKkeys EXRP->@*
要将标量推到数组上,可以使用push @NAME, LIST,也可以使用数组延迟,如push %BLOCK, LISTpush 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+

相关问题