[Moscow.pm] transform sort function to Schwartzian Transform ??

Denis Evdokimov evdokimov.denis на gmail.com
Пт Сен 9 08:51:00 PDT 2011


Немного корректировки.

Объявлять справочники стоит один раз(и обычно в начале программы).
По этому для начала вынеси
   my %months = (
       FY  => 0,
       Jan => 1,
       Feb => 2,
       Mar => 3,
       Apr => 4,
       May => 5,
       Jun => 6,
       Jul => 7,
       Aug => 8,
       Sep => 9,
       Oct => 10,
       Nov => 11,
       Dec => 12,
   );
в начало.

Дальше с регулярным выражением.
Оно сильно не оптимально из-за того, что \w включает в себя знак _
Так будет получше
m/([A-Z0-9]+_\d+_[A-Z0-9]+)_(\d+)-([A-Z][a-z]{2})-20\d{2}_(\d+)[.]xml/

Дублировать RegExp'ы плохо
По этому стоит объявить его один раз в начале
use constant RegExp_parse_name =>
qr/([A-Z0-9]+_\d+_[A-Z0-9]+)_(\d+)-([A-Z][a-z]{2})-20\d{2}_(\d+)[.]xml/;
А дальше использовать так:
 if ( $aa =~ RegExp_parse_name ) {
       ( $trade_id, $date, $month, $row_num ) = ( $1, $2, $months{$3}, $4 );
   }
   if ( $bb =~ RegExp_parse_name ) {
       ( $btrade_id, $bdate, $bmonth, $brow_num ) =
         ( $1, $2, $months{$3}, $4 );
   }


Подробная информация о списке рассылки Moscow-pm