Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 упростить getRelativePath   Alexander Kamotsky   21 Mar 2002 00:33:26 
 Re: упростить getRelativePath   Artem Chuprina   22 Mar 2002 12:25:30 
 упростить getRelativePath   Alexander Kamotsky   23 Mar 2002 00:31:59 
 Re: упростить getRelativePath   Artem Chuprina   24 Mar 2002 15:09:58 
Архивное /ru.perl/28453c9bbf00.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional