有一些带有单词的字符串,用空格分隔。我需要在每个单词中获取具有特定子字符串的单词数组,这些单词应该是唯一的。可以这样做,例如:
%arr = map { $_ => 1 } grep /foo/, $str=~/b(w+)b/g;
@arr = keys %arr;
但这是一行,为了简洁起见,我试图这样做:
@arr = keys map { $_ => 1 } grep /foo/, $str=~/b(w+)b/g;
但是我得到了错误(在Perl 5.24.1中(:
现在禁止使用标量上的实验性键
不幸的是,1 和 2 帖子并没有帮助我了解如何正确完成它。
你忘了实际创建一个哈希!
my @arr = keys %{ +{ map { $_ => 1 } grep /foo/, $str =~ /b(w+)b/g } };
但是有一种更好的方法来摆脱重复项。
my %seen;
my @arr = grep !$seen{$_}++, grep /foo/, $str =~ /b(w+)b/g;
或
sub uniq { my %seen; grep !$seen{$_}++, @_ }
my @arr = uniq grep /foo/, $str =~ /b(w+)b/g;
或
use List::Util qw( uniq );
my @arr = uniq grep /foo/, $str =~ /b(w+)b/g;
顺便一提
grep /foo/, $str =~ /b(w+)b/g
可以简化为
$str =~ /bw*foow*+/g