如果您需要以任何方式处理教师列表,则将数组上的映射转换为用于键合并的哈希然后对键进行排序是另一种好方法:
my @deduped = sort keys %{{ map { /.*/? ($_,1):() } @faculty }};
print join("\n", @deduped)."\n";
您可以通过更改用于选择或解析和捕获的正则表达式来处理列表,并且您可以通过任意复杂/.*/
的方式在每次传递中输出一个或多个变异的、非唯一的键。($_,1):()
如果您需要使用替换正则表达式修改运行中的数据,例如从名称 ( s/\.//g
) 中删除点,那么根据上述模式的替换将@faculty
由于$_
混叠而改变原始数组。您可以$_
通过制作数组的匿名副本来解决别名问题@faculty
(请参阅所谓的“婴儿车”运算符):
my @deduped = sort keys %{{ map {/.*/? do{s/\.//g; ($_,1)}:()} @{[ @faculty ]} }};
print join("\n", @deduped)."\n";
print "Unmolested array:\n".join("\n", @faculty)."\n";
在更新的 Perl 版本中,您可以传递keys
hashref,并且可以使用非破坏性替换:
my @deduped = sort keys { map { /.*/? (s/\.//gr,1):() } @faculty };
否则,其他地方的grep
解决$seen[$_]++
方案可能更可取。