[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