Если вам нужно каким-либо образом обработать список факультетов, карта с массивом, преобразованная в хеш для объединения ключей, а затем сортировки ключей, является еще одним хорошим способом:
my @deduped = sort keys %{{ map { /.*/? ($_,1):() } @faculty }};
print join("\n", @deduped)."\n";
Вы обрабатываете список, изменяя регулярное выражение /.*/
для выбора или анализа и захвата соответственно, и вы можете выводить один или несколько видоизмененных неуникальных ключей за проход, делая ($_,1):()
произвольно сложным.
Если вам нужно изменить данные в полете с помощью регулярного выражения подстановки, скажем, для удаления точек из имен (s/\.//g
), то подстановка в соответствии с вышеуказанным шаблоном приведет к изменению исходного массива @faculty
из-за $_
алиасинг. Вы можете обойтись псевдонимом $_
, сделав анонимную копию массива @faculty
(см. Так называемый оператор "baby cart" ):
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
хэш-ссылку и использовать неразрушающую замену:
my @deduped = sort keys { map { /.*/? (s/\.//gr,1):() } @faculty };
В противном случае решения grep
или $seen[$_]++
в других местах могут быть предпочтительнее.