my $ranking_dgp = 0; do { my $gene = $1; my $chromosone = $2; my $score_dgp = $3; $ranking_dgp = $ranking_dgp + 1; push @gene_score, [ $gene, $chromosone, $score_dgp, $ranking_dgp ]; } while ( $text =~ m{gene\=(ENSG\d+).*?\s+(\d+|X|Y)\s+.*?.*?.*?.*?\s(\d.\d+)\s\<\/TD\>}gsm); print Dumper @gene_score; #### $VAR1 = [ undef, undef, undef, '1' ]; $VAR2 = [ 'ENSG00000165659', '13', '0.738681', 2 ]; $VAR3 = [ 'ENSG00000184226', '13', '0.627447', 3 ];