1

我似乎在用旧版本的 perl 编译我的 perl 脚本时遇到问题,我希望有人能帮助我。我最初编写和编译 perl 文件时没有出现问题的系统是使用 perl v5.16.3,我现在正在尝试编译和运行它的系统是使用 perl v5.8.5,我认为这就是问题所在。我知道在 v5.10 中对 ~~ 的使用方式进行了很多更改。v5.10 是第一个实际使用 ~~ 运算符的版本吗?

以下是我遇到语法错误的代码:

if (/$SEARCH/x ~~ @{$pids{$mPID}{$key}}){

这是我得到的错误:

syntax error at /sysadm/shared/ftp_search.pl line 310, near "/$SEARCH/x ~"
syntax error at /sysadm/shared/ftp_search.pl line 310, near "})"

这是周围的代码,因此您可以更好地了解正在发生的事情:

 foreach my $mPID (keys %pids){
    foreach my $key (keys %{$pids{$mPID}}){
        if (/$SEARCH/x ~~ @{$pids{$mPID}{$key}}){
        } else {
            delete $pids{$mPID}{$key};
        }
    }
}

所以基本上,我有一个散列哈希,基本上如果语句最终不匹配,它将从散列中删除它。我正在努力尝试升级服务器上的 perl,但仍在尝试获得批准。我是否正确假设这是由于使用了 perl 版本?

谢谢你。

4

1 回答 1

1

智能匹配运算符是在 5.10.0 中添加的,在任何以前的 perl 版本中都不起作用。(perl 5.10.0 更改日志

附带说明一下,从 5.18.0 开始,该运算符已被归类为“实验性”,不建议依赖它。(5.18.0 更改日志)。

智能匹配,在 v5.10.0 中添加并在 v5.10.1 中进行了重大修改,一直是投诉点。尽管它有很多有用的方式,但它也被证明对于 Perl 的用户和实现者来说是有问题的和令人困惑的。关于如何最好地解决这个问题,已经提出了许多建议。很明显,smartmatch 几乎肯定会在未来改变或消失。不建议依赖其当前行为。

于 2014-06-25T17:57:21.993 回答