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 = $result[0]; そこで配列に要素を 1 つだけ取得します。

于 2011-07-18T19:09:25.153 に答える