|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander Kamotsky 2:463/544.9 23 Mar 2002 00:31:59 To : Artem Chuprina Subject : упростить getRelativePath -------------------------------------------------------------------------------- AK>> Что мне не нравится: куча массивов, много переменных вообще, AK>> отдельная обработка имени файла для добавления его в конец... AC> Как бы я решал такую задачу: AC> sub getRelativePath { AC> my ($src,$dst) = @_; AC> # Откусываем общий префикс AC> while ($src =~ m#^([^/]*/)# && substr($dst,0,length($1)) eq $1) { AC> substr($dst,0,length($1),''); AC> substr($src,0,length($1),''); AC> } AC> # Считаем оставшиеся слеши в $src AC> my $n = ($src =~ tr#/##); AC> # Hа каждый слеш добавляем "../" в начало $dst AC> return ('../' x $n) . $dst; AC> } AC> Последние два оператора разделены для удобокомментируемости. Я бы их в AC> один записал. Вот! Вот это мне уже больше нравится =) Я уж начинал подумывать, а нельзя ли запихнуть src и dst в одну строку, разделив каким-нибудь символом (например '?') или словом, а потом как-то одним махом откусить (пока не получилось). Однако проблемка: мой перл ругается Too many arguments for substr at relp2.pl line 7, near """)" Too many arguments for substr at relp2.pl line 8, near """)" на вполне безобидные строки: substr ($dst, $0, length($1), ""); substr ($src, $0, length($1), ""); =( Как я понял - это его глюк. 'This is perl, version 5.003_93' под DOS... Придется менять... =) P.S. Кстати, в моем варианте была ошибка, нужно было вставить строку (для случая одного и того же каталога): for (;;) { $dir1 = ($i1 <= $#srcDirs)? $srcDirs[$i1] : ""; $dir2 = ($i2 <= $#dstDirs)? $dstDirs[$i2] : ""; > last if (($dir1 eq "") and ($dir2 eq "")); last if (!($dir1 eq $dir2)); $i1++; $i2++; } Всего доброго, Artem Chuprina. --- #include <"tearline.cpp"> * Origin: (-: "ниждиро йынтарбо" (2:463/544.9) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/28453c9bbf00.html, оценка из 5, голосов 10
|