Эта ошибка возникает при попытке кодировать строку, отличную от юникода: она пытается ее декодировать, предполагая, что она находится в простой ASCII. Есть две возможности:
f.write(all_html)
. .encode(...)
, он сначала пытается его декодировать. use List::MoreUtils qw/ uniq /;
my @unique = uniq @faculty;
foreach ( @unique ) {
print $_, "\n";
}
Я предлагаю продвинуть его в хеш. как это:
my %faculty_hash = ();
foreach my $facs (@faculty) {
$faculty_hash{$facs} = 1;
}
my @faculty_unique = keys(%faculty_hash);
Ваш лучший выбор состоял бы в том, чтобы использовать (в основном) встроенный инструмент, как uniq (как описано innaM).
Если у Вас нет способности использовать uniq и хотеть сохранить порядок, можно использовать grep для моделирования этого.
my %seen;
my @unique = grep { ! $seen{$_}++ } @faculty;
# printing, etc.
Это сначала дает Вам хеш, где каждый ключ является каждой записью. Затем Вы выполняете итерации по каждому элементу, рассчитывая, сколько из них существует, и добавление первого. (Обновленный с комментариями brian d foy)