#!perl use strict; use warnings; use Data::Dumper; my @array = qw/name1 name2 name3 name4 name5/; my %file = (); $file{ (split)[0] } = (split)[1] while ; my @result = map { $_->[1] } sort { $a->[0] cmp $b->[0] } map { [ $_, exists $file{$_} ? $file{$_}+0 : 999 ] } @array; print Dumper( \@result ); # output: # #$VAR1 = [ # '4.5', # 999, # '3.4', # '-7.9', # '6.5' # ]; __DATA__ name1 4.5 name3 3.4 name5 6.5 name4 -7.9 name6 3.2