|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : milon 2:5020/400 26 Feb 2004 01:55:26 To : Yury Kopyl Subject : Re: hard sort -------------------------------------------------------------------------------- "Yury Kopyl" to "milon" m>>> здесь $N - количество записей в одном поле или количество строк, m>>> коли угодно, а $ref[$i] = \@{ $h{"field$i"} } - ссылка на анонимный m>>> массив - их то и может быть сколько угодно. YK>>> eval? m>> дык пробовал я. m>> создаю строку - суть контент подпрограммы сортировки. m>> типа: m>> $query = <<'Q'; m>> $ref[0]->[$a] cmp $ref[0]->$b || m>> $ref[1]->[$a] cmp $ref[1]->$b m>> Q m>> а потом пишу: m>> @sorted_indexes = sort { m>> eval $query; m>> } (0 .. $N); m>> работает, но неправильно. m>> т.е. ошибок нет, а результат 0..$N. m>> список не сортируется. m> подозреваю, что $a и $b, в eval не те, как-то он их не видит, что-ли. YK> можно попробовать заэскейпить, а можно сделать след образом: YK> YK> @sorted_indexes = sort {cmp($a,$b)} @indexes; YK> YK> YK> sub cmp{ YK> my ($a,$b)=@_; YK> YK> my $str='return '.q~ YK> $ref[0]->[$a] cmp $ref[0]->$b || YK> $ref[1]->[$a] cmp $ref[1]->$b YK> ~; YK> YK> eval $str; YK> } так катит. даже без return. выходит дело в этих почти глобальных переменных? а можна не делать отдельную функцию? а то уменя это и так sub - получится функция в функции :) пробую: @sorted_indexes = sort { my ($aa,$bb); ($aa, $bb)=($a,$b); eval $str; #где $str - это #$ref[0]->[$aa] cmp $ref[0]->[$bb] || #$ref[1]->[$aa] cmp $ref[1]->[$bb] } @indexes; не работает... --- ifmail v.2.15dev5.3 * Origin: Svit Online (post does not reflect views of Golden Tele (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/167955f60f8ff.html, оценка из 5, голосов 10
|