use strict; use diagnostics; use warnings; use autodie qw(open close); use Data::Dumper; use 5.010; #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"; #open my $out2,'>' , "./Test_Data_Out_None_Match.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,]+/); say "values are $ita $spa $num"; $hash{$ita}[0] = $spa; #what about if there is no $num at position 1 in 1st file? if ( defined $num ) { $hash{$ita}[2] = $num; } } close $in; while (<$in1>) { chomp; my ( $ita, $fren, $num1, $num2 ) = split(/[=\s,]+/); say "values are $ita $fren $num1 $num2"; $hash{$ita}[1] = $fren; #now hash's format will look like this: ita=> spa fren #define if there are numbers in position 3 and 4 concat to position 3 if ( defined($num1) and defined($num2) ) { $hash{$ita}[3] = "$num1 $num2"; } elsif ( defined $num1 ) { $hash{$ita}[3] = $num1; } } 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"; } } print Dumper(\%hash); close $out; close $out1; #### C:\Users\Fred\Desktop\pm>type OUT* OUT_Test_Data_Ita_SpanFren_rest.txt sei =>seis,six,,six quattro =>quatro,quatre,,four due =>dos,deux,zwei,two dieci =>diez,dix,zehn sette =>siete,sept,sechs,seven sechs cinque =>cinco,cinq,funf,funf five undici =>once,onze,elf,eleven tre =>tres,trois,drei,drei three tredici =>trece,treize,dreizehn,thirteen dreizehn OUT_Test_data_NO_match_SpanFren.txt dodici =>doce uno =>uno,,eins nouve =>nueve,,neun otto =>ocho #### $VAR1 = { 'sei' => [ 'seis', 'six', '', 'six' ], 'quattro' => [ 'quatro', 'quatre', undef, 'four' ], 'due' => [ 'dos', 'deux', 'zwei', 'two ' ], 'dieci' => [ 'diez', 'dix', 'zehn' ], 'sette' => [ 'siete', 'sept', 'sechs', 'seven sechs' ], 'dodici' => [ 'doce' ], 'uno' => [ 'uno', undef, 'eins' ], 'nouve' => [ 'nueve', undef, 'neun' ], 'cinque' => [ 'cinco', 'cinq', 'funf', 'funf five' ], 'otto' => [ 'ocho' ], 'undici' => [ 'once', 'onze', 'elf', 'eleven' ], 'tre' => [ 'tres', 'trois', 'drei', 'drei three' ], 'tredici' => [ 'trece', 'treize', 'dreizehn', 'thirteen dreizehn' ] };