2

我知道有一个类似的问题,但我从那里获取了提示并将其应用于我的代码以删除重复项。我得到的只是数组的最后一个元素。我看不出哪里出错了。请帮我找出我哪里出错了。

use strict;
use warnings;
use File::Find;
use Data::Dumper;
use List::MoreUtils qw/ uniq /;

my $localdir = 'images/p/';
my @filefound;
my @split1;
my $before;

find(sub {push @filefound, $File::Find::name if /.jpg$/ },$localdir);

for(@filefound) { print "$_ \n";}

foreach (@filefound){
my @result = split('_',$_);
@split1 = $result[0];
}

my %unique = ();
foreach my $item (@split1)
{ 
    $unique{$item} ++;
}

my @myuniquearray = keys %unique;
foreach (@myuniquearray){ print "$_  \n";}
4

3 回答 3

3

问题出在这里:

foreach (@filefound){
    my @result = split('_',$_);
    @split1 = $result[0];
}

@split1每次都通过循环重新分配。尝试push @split1, $result[0];将新元素推送到现有列表中。

于 2011-07-18T19:06:20.897 回答
1

在第一个 foreach 中,您@split1在每次迭代中都覆盖,而不是将结果添加到列表中。

于 2011-07-18T19:07:03.747 回答
1

@split1 = $结果[0];那里的数组中只有一个元素。

于 2011-07-18T19:09:25.153 回答