sub main { my $file = 'new_text.csv'; open FH, '<', $file or die "Cannot open the $file: $!"; ; my %hash; my @array_of_hash; LINE: while(my $line = ) { chomp $line; $line =~ s/\s+\$|approx\.\s*|\?|^\s*//g; next LINE if ( $line !~ /\S+/ ); my @values = split /\s*,\s*/, $line; if ( scalar @values != 3){ next LINE; } foreach ( @values ){ if ( $_ eq '' ) { next LINE; } } my ($name, $payment, $date ) = @values; %hash = ( 'name' => $name, 'payment' => $payment, 'date' => $date, ); push @array_of_hash, \%hash; } } main(); #### #I'm expecting an output like { name => xxx, payment => xxx, date => xxx, }, { name => xxx, payment => xxx, date => xxx, }, { name => xxx, payment => xxx, date => xxx, }, { name => xxx, payment => xxx, date => xxx, }, #Unfortunately i'm getting an output like... print Dumper (@array_of_hash); $VAR1 = { 'payment' => '0.57', 'name' => 'Rene Descarted', 'date' => '10072033' }; $VAR2 = $VAR1; $VAR3 = $VAR1; $VAR4 = $VAR1;