我知道有一个类似的问题,但我从那里获取提示并应用于我的代码以删除重复项。我得到的只是数组的最后一个元素。我无法看到我错在哪里。请帮我找出我出错的地方。
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";}
答案 0 :(得分:3)
问题在于:
foreach (@filefound){
my @result = split('_',$_);
@split1 = $result[0];
}
每次循环都会重新分配@split1
。请尝试push @split1, $result[0];
将新元素推送到现有列表。
答案 1 :(得分:1)
在第一个foreach中,您将在每次迭代中覆盖@split1
,而不是将结果添加到列表中。
答案 2 :(得分:1)
@ split1 = $ result [0]; 你的数组中只有一个元素。