#!/usr/bin/env perl
use v5.12;
use warnings;
use utf8;
#use Smart::Comments;
my $RegExp_parse_name = qr/(\w+)_(\d{2})-(\w{3})-(\d{4})_(\d+)/;
#create month hash
my %months;
@months{ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
) } = ( '00' .. '11' ); # two symbol for correct literal matching # %months
my ($result, $index);
while ( my $str = <DATA> ){
my $search_str = $str;
next unless $search_str =~ s/$RegExp_parse_name/$4-$months{$3}-$2:$5/;
my $trade_id = $1;
# ok, if we are search less value - ignore greater
next if ( exists $index->{$trade_id} && ( $index->{$trade_id} lt $search_str ) );
$index->{$trade_id} = $search_str;
$result->{$trade_id} = $str;
}
# $result
__DATA__
N1089767N_7_SWOPT_03-Jul-2011_78919186.xml
N1089767N_7_SWOPT_25-Jun-2011_72745892.xml
N1089772L_9_SWOPT_03-Jul-2011_78979055.xml
N1089772L_9_SWOPT_20-Jul-2011_69380887.xml
N1089772L_9_SWOPT_29-Jun-2011_74754662.xml
IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHY1LjEyOwp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKI3VzZSBTbWFydDo6Q29tbWVudHM7CgpteSAkUmVnRXhwX3BhcnNlX25hbWUgPSBxci8oXHcrKV8oXGR7Mn0pLShcd3szfSktKFxkezR9KV8oXGQrKS87CgojY3JlYXRlIG1vbnRoIGhhc2gKbXkgJW1vbnRoczsKQG1vbnRoc3sgcXcoIEphbiBGZWIgTWFyIEFwciBNYXkgSnVuIEp1bCBBdWcgU2VwIE9jdCBOb3YgRGVjICkgfSA9ICggJzAwJyAuLiAnMTEnICk7ICMgdHdvIHN5bWJvbCBmb3IgY29ycmVjdCBsaXRlcmFsIG1hdGNoaW5nCiMgJW1vbnRocwoKbXkgKCRyZXN1bHQsICRpbmRleCk7Cgp3aGlsZSAoIG15ICRzdHIgPSA8REFUQT4gKXsKCQoJY2hvbXAgJHN0cjsKCW15ICRzZWFyY2hfc3RyID0gJHN0cjsKCW5leHQgdW5sZXNzICRzZWFyY2hfc3RyID1+IHMvJFJlZ0V4cF9wYXJzZV9uYW1lLyQ0LSRtb250aHN7JDN9LSQyOiQ1LzsKCW15ICR0cmFkZV9pZCA9ICQxOwoJCQoJIyBvaywgaWYgd2UgYXJlIHNlYXJjaCBsZXNzIHZhbHVlIC0gaWdub3JlIGdyZWF0ZXIKCW5leHQgaWYgKCBleGlzdHMgJGluZGV4LT57JHRyYWRlX2lkfSAmJiAoICRpbmRleC0+eyR0cmFkZV9pZH0gbHQgJHNlYXJjaF9zdHIgKSApOwoJCgkkaW5kZXgtPnskdHJhZGVfaWR9ID0gJHNlYXJjaF9zdHI7CgkkcmVzdWx0LT57JHRyYWRlX2lkfSA9ICRzdHI7CgkKfQojICRyZXN1bHQKCnNheSAkcmVzdWx0LT57JF99IGZvcmVhY2ggKCByZXZlcnNlIHNvcnQga2V5cyAlJHJlc3VsdCApOwoKCl9fREFUQV9fCk4xMDg5NzY3Tl83X1NXT1BUXzAzLUp1bC0yMDExXzc4OTE5MTg2LnhtbApOMTA4OTc2N05fN19TV09QVF8yNS1KdW4tMjAxMV83Mjc0NTg5Mi54bWwKTjEwODk3NzJMXzlfU1dPUFRfMDMtSnVsLTIwMTFfNzg5NzkwNTUueG1sCk4xMDg5NzcyTF85X1NXT1BUXzIwLUp1bC0yMDExXzY5MzgwODg3LnhtbApOMTA4OTc3MkxfOV9TV09QVF8yOS1KdW4tMjAxMV83NDc1NDY2Mi54bWwK