I have an array like this (it's just a little overview but it has 2000 and more lines like this):
@list = (
"affaire,chose,question",
"cause,chose,matière",
);
I'd like to have this output:
%te = (
affaire => "chose", "question",
chose => "affaire", "question", "cause", "matière",
question => "affaire", "chose",
cause => "chose", "matière",
matière => "cause", "chose"
);
I've created this script but it doesn't work very well and I think is too much complicated..
use Data::Dumper;
@list = (
"affaire,chose,question",
"cause,chose,matière",
);
%te;
for ($a = 0; $a < @list; $a++){
@split_list = split (/,/,$list[$a]);
}
foreach $elt (@split_list){
print "SPLIT ELT : $split_list[$elt]\n";
for ($i = 0; $i < @list; $i++){
$test = $list[$i]; #$test = "affaire,chose,question"
if (exists $te{$split_list[$elt]}){ #if exists affaire in %te
@t = split (/,/,$test); # @t = affaire chose question
print "T : @t\n";
@temp = grep(!/$split_list[$elt]/, @t);
print "GREP : @temp\n";#@temp = chose question
@fin = join(', ', @temp); #@fin = chose, question;
for ($k = 0; $k < @fin; $k++){
$te{$split_list[$elt]} .= $fin[$k]; #affaire => chose, question
}
}
else {
@t = split (/,/,$test); # @t = affaire chose question
print "T : @t\n";
@temp = grep(!/$split_list[$elt]/, @t);
print "GREP : @temp\n";#@temp = chose question
@fin = join(', ', @temp); #@fin = chose, question;
for ($k = 0; $k < @fin; $k++){
$te{$split_list[$elt]} = $fin[$k];
}
}
}
}
print Dumper \%te;
OUTPUT:
SPLIT ELT : cause
T : affaire chose question
GREP : affaire chose question
T : cause chose matière
GREP : chose matière
SPLIT ELT : cause
T : affaire chose question
GREP : affaire chose question
T : cause chose matière
GREP : chose matière
SPLIT ELT : cause
T : affaire chose question
GREP : affaire chose question
T : cause chose matière
GREP : chose matière
$VAR1 = {
'cause' => 'affaire, chose, questionchose, matièreaffaire, chose, questionchose, matièreaffaire, chose, questionchose, matière'
};