【发布时间】:2014-06-26 01:57:21
【问题描述】:
我似乎在用旧版本的 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 版本?
谢谢。
【问题讨论】:
-
引用the doc,'首先在 Perl 5.10.1 中可用(5.10.0 版本的行为不同),二进制 ~~ 在其参数之间进行“智能匹配”。
-
你能解释一下你想让智能匹配做什么吗?
-
不管怎样,如果你有很多依赖智能匹配的代码,并且需要将其反向移植到 Perl 5.8.x,请查看 match::smart — 我的重新可用于 Perl 5.8.1 及更高版本的智能匹配的匹配算法(但不是其语法)的实现。还有match::simple,它提供了一个更简单的匹配算法,并有一个可选的XS 后端。在将字符串与字符串数组匹配的情况下,match::simple XS 后端的基准测试实际上比 Perl 的内置智能匹配更快!
-
太棒了!谢谢@tobyink!
标签: perl hash syntax smartmatch