my @fieldnames = qw /S_10 S_11 S_12 S_13 S_14 S_15 T_10 T_11 T_12 T_13 T_14 T_15/; # Note you could also make it dynamic and generate it from the input my %params; while (<$Param>) { my ($index, @values) = split /,/, $_; $params{$index} = { map {$fieldnames[$_], $values{$_}} 0..15;} } #### use strict; use warnings; my (undef, @fieldnames) = split /,/, ; chomp @fieldnames; my %params; while () { chomp; my ($index, @values) = split /,/, $_; $params{$index} = {map {$fieldnames[$_], $values[$_]} 0..$#fieldnames}; } my $stat = "1,10 2,11 3,12 4,13 5,14"; open my $STAT, "<", \$stat or die "cannot open $stat $!"; while (<$STAT>) { chomp; next if /sta/i; my ($stat, $code) = split /,/; print "Station $stat : Salinity: ", $params{$stat}{"S_$code"}, "; Temperature: ", $params{$stat}{"T_$code"}, "\n"; } __DATA__ Station,S_10,S_11,S_12,S_13,S_14,S_15,T_10,T_11,T_12,T_13,T_14,T_15 1,31,29,29,31,29,29,15,14,23,15,14,23 2,33,28,23,33,28,23,17,15,23,17,15,23 3,23,27,33,23,27,33,18,16,23,18,16,23 4,25,26,28,25,26,28,23,14,15,23,14,15 5,26,26,27,26,26,27,23,18,17,23,18,17 6,27,33,31,27,33,31,14,17,18,14,17,18 7,33,29,29,33,29,29,12,18,23,12,18,23 #### Station 1 : Salinity: 31; Temperature: 15 Station 2 : Salinity: 28; Temperature: 15 Station 3 : Salinity: 33; Temperature: 23 Station 4 : Salinity: 25; Temperature: 23 Station 5 : Salinity: 26; Temperature: 18