sub time_to_2400 { my $time = shift; my ( $hour, $min, $ap ) = ( $time =~ /^(\d{1,2}):(\d\d)\s([APM]{2})$/; $hour = 0 if $hour == 12; # return ( $hour * 100 + $minute + ( ( $ap eq 'AM' ) ? 0 : 1200 ) ); } my @sorted_list = map { $database_in[ $$_[0] ] } sort { $$a[1] <=> $$b[1] } map { [ $_, time_to_2400( (split /\t/, $database_in[ $_ ])[4] ) ] } (0..@database_in-1);