从地图中检索哈希键



有一些带有单词的字符串,用空格分隔。我需要在每个单词中获取具有特定子字符串的单词数组,这些单词应该是唯一的。可以这样做,例如:

%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

最新更新