Простая функция массива Perl не работает - PullRequest
0 голосов
/ 07 июня 2010

Этот простой Perl-скрипт переводит истории из базы данных в XML, но этот раздел вызывает у меня проблемы. Функция makeUrl вызывается для каждой истории, но она должна гарантировать, что дублирующиеся URL не создаются.

my @headlines = ();
my $hlCount = 1;
.
.
.

sub makeUrl {
  my $headline;
  open( URLSOUT, '>>/var/mtkoan/harris/urls' );

  $url = $_[0];
  print URLSOUT "Before: $url\n";
  $url =~ s/\x{90}//g;
  $url =~ s/\s+$//g;
  $url =~ s/^\s+//g;
  $url =~ s/\s/_/g;
  $url =~ s/\W//g;

  push @headlines, $url;
  foreach $headline (@headlines) {
    if( $headline eq $url ) {
      $url .= "_$hlCount";
      $hlCount++;
    }
  }

  print URLSOUT "After: $url\n\n";
  print URLSOUT "Headline Array Dump:\n";
  print URLSOUT "@headlines\n";
  close URLSOUT;
}

Когда массив печатается, отображается только последнее значение. Push не добавляется в конец массива, я не могу понять!

1 Ответ

0 голосов
/ 07 июня 2010

Вы можете проверить уникальность (и удалить дубликаты из списка) двумя основными способами:

С хешем:

    my %urls;
    # construct your URL in the function...
    $urls{$url}++;

    # get all the (unique) URLs:
    my @urls = keys %urls;

С помощью библиотечного вызова, который возвращает уникальные значения в списке (см. List :: MoreUtils ):

    use List::MoreUtils 'uniq`;
    @urls = uniq @urls;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...