use Data::Dumper; use strict; use warnings; my @string_array = qw(foo bar baz); my %base_stat; foreach (@string_array){ my @string = split ''; my $basecount = 0; foreach my $pos (@string){ $basecount++; my $pos_score = ord($pos)-33; push @{$base_stat{$basecount} ||= []}, $pos_score; # my @temp_array = $base_stat{$basecount}; # line 124 # push @temp_array, $pos_score; # $base_stat{$basecount} = "@temp_array"; } } print Dumper(\%base_stat);