fork(1) download
  1. #!/usr/bin/env perl
  2.  
  3. use v5.12;
  4. use warnings;
  5. use utf8;
  6.  
  7. #use Smart::Comments;
  8.  
  9. my $RegExp_parse_name = qr/(\w+)_(\d{2})-(\w{3})-(\d{4})_(\d+)/;
  10.  
  11. #create month hash
  12. my %months;
  13. @months{ qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ) } = ( '00' .. '11' ); # two symbol for correct literal matching
  14. # %months
  15.  
  16. my ($result, $index);
  17.  
  18. while ( my $str = <DATA> ){
  19.  
  20. chomp $str;
  21. my $search_str = $str;
  22. next unless $search_str =~ s/$RegExp_parse_name/$4-$months{$3}-$2:$5/;
  23. my $trade_id = $1;
  24.  
  25. # ok, if we are search less value - ignore greater
  26. next if ( exists $index->{$trade_id} && ( $index->{$trade_id} lt $search_str ) );
  27.  
  28. $index->{$trade_id} = $search_str;
  29. $result->{$trade_id} = $str;
  30.  
  31. }
  32. # $result
  33.  
  34. say $result->{$_} foreach ( reverse sort keys %$result );
  35.  
  36.  
  37. __DATA__
  38. N1089767N_7_SWOPT_03-Jul-2011_78919186.xml
  39. N1089767N_7_SWOPT_25-Jun-2011_72745892.xml
  40. N1089772L_9_SWOPT_03-Jul-2011_78979055.xml
  41. N1089772L_9_SWOPT_20-Jul-2011_69380887.xml
  42. N1089772L_9_SWOPT_29-Jun-2011_74754662.xml
  43.  
Success #stdin #stdout 0.02s 5652KB
stdin
Standard input is empty
stdout
N1089772L_9_SWOPT_29-Jun-2011_74754662.xml
N1089767N_7_SWOPT_25-Jun-2011_72745892.xml