... my $header1 = <$in1>; <$in2>; my @heads1 = split /\s*,\s*/, $header1; my $index = 5; my %index_map; for (@heads1) { $index_map{$index++} = $1 + 4 if /SAMPLE_(\d+)/; } print $header1; while (my $line1 = <$in1>) { my @fields1 = get_fields($line1); defined(my $line2 = <$in2>) or die "Data missing in file '$file2': $!"; my @fields2 = get_fields($line2); my @out = @fields1; for my $i (5 .. $#fields1) { if ($fields1[$i] ne 'REF') { my $j = $index_map{$i}; $out[$i] = $fields2[$j] if exists $fields2[$j] && $fields2[$j] ne 'REF'; } } @out = map { "'$_'" } @out; print '[', join(', ', @out), "]\n"; } ...