Я не понял проблемы. Любую программу можно переписать при знании исходного и целевого алгоритмов.<div><br></div><div>Зачем сюда приплетать кучу народу?<br><br><div class="gmail_quote">9 сентября 2011 г. 19:21 пользователь Nikolay Mishin <span dir="ltr"><<a href="mailto:mi@ya.ru">mi@ya.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Moscow PM<br>
<br>
Помогите , есть программа, сортирующая файлы:<br>
можно ли ее переписать с использованием Schwartzian Transform<br>
типа @new = map { $_->[0] }<br>
  sort { $b->[1] <=> $a->[1] || $a->[2] cmp $b->[2] }<br>
  map { [ $_, /=(\d+)/, uc($_) ] } @old;<br>
у меня что-то не получается<br>
#содержимое confile<br>
# N1089767N_7_SWOPT_03-Jul-2011_78919186.xml<br>
# N1089767N_7_SWOPT_25-Jun-2011_72745892.xml<br>
# N1089772L_9_SWOPT_03-Jul-2011_78979055.xml<br>
# N1089772L_9_SWOPT_20-Jul-2011_69380887.xml<br>
# N1089772L_9_SWOPT_29-Jun-2011_74754662.xml<br>
open( CONSULTS, "confile" );<br>
@scons = <CONSULTS>;<br>
close CONSULTS;<br>
my %is_trade_id_unique;<br>
foreach ( reverse sort consort @scons ) {<br>
    chomp;<br>
    if ( $_ =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {<br>
        my ( $trade_id, $date, $month, $row_num ) = ( $1, $2, $3, $4 );<br>
        if ( !$is_trade_id_unique{$trade_id} ) {<br>
            print $_. "\n";<br>
            $is_trade_id_unique{$trade_id} = 1;<br>
        }<br>
    }<br>
<br>
}<br>
<br>
#N1089767N_7_SWOPT_03-Jul-2011_78919186.xml<br>
sub consort {<br>
    $aa = $a;<br>
    $bb = $b;<br>
<br>
  # save our variables because our sort routine affects them.  If I "chomp $a"<br>
  # that will actually change the line seen in the foreach loop that calls this.<br>
    chomp $aa;<br>
    chomp $bb;<br>
<br>
    $aa =~ s/^  *//;<br>
    $bb =~ s/^  *//;<br>
<br>
    my %months = (<br>
        FY  => 0,<br>
        Jan => 1,<br>
        Feb => 2,<br>
        Mar => 3,<br>
        Apr => 4,<br>
        May => 5,<br>
        Jun => 6,<br>
        Jul => 7,<br>
        Aug => 8,<br>
        Sep => 9,<br>
        Oct => 10,<br>
        Nov => 11,<br>
        Dec => 12,<br>
    );<br>
<br>
    my ( $trade_id,  $date,  $month,  $row_num );<br>
    my ( $btrade_id, $bdate, $bmonth, $brow_num );<br>
    if ( $aa =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {<br>
        ( $trade_id, $date, $month, $row_num ) = ( $1, $2, $months{$3}, $4 );<br>
    }<br>
    if ( $bb =~ m/(\w+_\d+_\w+)_(\d+)-([A-Za-z]{3})-2011_(\d+)[.]xml/i ) {<br>
        ( $btrade_id, $bdate, $bmonth, $brow_num ) =<br>
          ( $1, $2, $months{$3}, $4 );<br>
    }<br>
<br>
         $trade_id cmp $btrade_id<br>
      || $month <=> $bmonth<br>
      || $date <=> $bdate<br>
      || $row_num <=> $brow_num;<br>
<br>
}<br>
<font color="#888888"><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</font></blockquote></div><br></div>