uno = uno due = dos,zwei tre = tres,drei quattro = quatro cinque = cinco,funf sei = seis, sette = siete,sechs otto = ocho nouve = nueve, neun dieci = diez, zehn undici = once, elf dodici = doce tredici = trece, dreizehn #### uno = un, one due =deux, two, tre = trois,drei, three quattro = quatre,four cinque = cinq,funf, five sei = six , six sette = sept , seven ,sechs dieci =dix undici = onze,eleven tredici = treize,thirteen, dreizehn #### use strict; use diagnostics; use warnings; use autodie qw(open close); use Data::Dump qw(dump); #declare variables my %hash; my $data; #opening Files using autodie to cut typing... open my $in, '<',"./Test_Data_RandNumbers.txt"; open my $in1,'<',"./Test_Data_More_RandNumbers.txt"; open my $out ,'>' ,"./OUT_Test_Data_Ita_SpanFren_rest.txt"; open my $out1,'>',"./OUT_Test_data_NO_match_SpanFren.txt"; while (<$in>){ #data manipulation to clean up ='s and ,'s #dieci = diez, zehn -->worse case, remove spaces and = and comma; #quattro = quatro -->only one number with spaces or not in from of =... chomp; my ($ita,$spa,$num)= split(/[=\s,]+/); # removes '=' or 's' or ',' & '+' to match 1 or more these characters $hash{$ita}[0]=$spa; #what about if there is no $num at position 1 in 1st file? if (defined $num){ $hash{$ita}[2]=$num; # if defined then keep it for check later in position 2 in array } } close $in; while (<$in1>){ chomp; my ($ita,$fren,$num1,$num2)= split(/[=\s,]+/); #creates col of numbers $hash{$ita}[1]=$fren; #now hashs format will look like this: ita=> spa fren #define if there is are numbers in position 3 and 4 concat to position 3 if (defined ($num1) and defined ($num2)){ $hash{$ita}[3]=$num1.$num2; # concat if numbers defined in poition 1 and 2 and store in 3 } elsif(defined $num1) { $hash{$ita}[3]=$num1; #if array has num in pos 2 then save number in position 3(dieci) } } close $in1; foreach my $ita (keys %hash){ if($hash{$ita}[0] and $hash{$ita}[1]){ print $out "$ita =>", join(',',@{$hash{$ita}}),"\n"; }else { print $out1 "$ita =>",join(',',@{$hash{$ita}}),"\n"; } } close $out; close $out1;