简单的perl数组函数不起作用

时间:2010-06-07 17:04:34

标签: perl

这个简单的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;
}

打印数组时,仅显示最后一个值。推送没有附加到数组的末尾,我无法弄明白!

1 个答案:

答案 0 :(得分:0)

您可以通过两种主要方式检查唯一性(并从列表中删除重复项):

使用哈希:

    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;