Нахождение релиза определенного модуля-версии - PullRequest
1 голос
/ 12 ноября 2010

С

use Term::Size;
say $Term::Size::VERSION;

Я могу узнать версию модуля.
Как скрипт может узнать дату выпуска этой версии модуля?

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010
  1. Создайте URL-адрес для модуля , выполнив поиск следующим образом: "http://search.cpan.org/perldoc?Term::Size".

  2. Получите URL-адрес с помощью LWP. Обратите внимание, что приведенный выше URL-адрес вернетсяответ HTTP перенаправления на РАЗЛИЧНЫЙ URL: http://search.cpan.org/~ferreira/Term-Size-0.207/Size.pm - это ссылка на последнюю версию модуля.

    ПРИМЕЧАНИЕ : эти шаги (#1- # 4) необходимы по двум причинам:

    a. Постоянная ссылка основного выпуска (http://search.cpan.org/dist/Term-Size) относится только к последней версии.

    b. Гораздо более серьезная проблема заключается в том, что модуль может быть частью большего дистрибутива. Модули сами по себе не имеют дат выпуска - только релизы делают . Например, для "XML :: Parser :: Style :: Tree" это часть XML-Parser дистрибутива и, следовательно, URL должен иметь префикс http://search.cpan.org/~msergeant/XML-Parser-2.36, который вы не можете автоматически вычислить без шагов # 1- # 4.

    Это критическое различие, к сожалению, не очевидно в вашем примере, потому что вы просто повезли ввыбор модуля, который разделяет свое имя с именем дистрибутива

  3. Измените этот URL, заменив «последнюю» версию, которую вы автоматически получили из перенаправления (0.207), на свою собственную (скажем, 0.203).Вы получаете http://search.cpan.org/~ferreira/Term-Size-0.203/Size.pm

  4. Измените этот URL, чтобы удалить специфичный для модуля суффикс, например, "Size.pm" - вы получите http://search.cpan.org/~ferreira/Term-Size-0.203/, который является URL для выпуска этой версии.

    Альтернативный подход состоит в том, чтобы получить URL-адрес релиза, фактически захватывая страницу модуля через WWW :: Mechanize, анализируя HTML-код HTML :: TreeParser или регулярное выражение и находя относительную ссылку на выпуск в фрагменте HTML-кода.выглядит вот так - это ВТОРАЯ a href ссылка в элементе DIV с id=premalink:

    <a name="_top"></a>
     <div class=path>
    
    
     <div id=permalink class="noprint"><a href="/perldoc?Term::Size">permalink</a>
     </div>
     <a href="/~ferreira/">&#65;&#100;&#114;&#105;&#97;&#110;&#111; &#70;&#101;&#114;&#114;&#101;&#105;&#114;&#97;</a> &gt;
     <a href="/~ferreira/Term-Size-0.203/">&#84;&#101;&#114;&#109;-&#83;&#105;&#122;&#101;-0.203</a> &gt;
      &#84;&#101;&#114;&#109;::&#83;&#105;&#122;&#101;
    </div>
    
  5. Теперь у вас есть URL-адрес страницы релиза для ВАШЕЙ версии (http://search.cpan.org/~ferreira/Term-Size-0.203/)

  6. Извлеките страницу выпуска правильной версии с помощью WWW :: Mechanize и выполните синтаксический анализ с помощью HTML :: TreeParser или любого другого любимого модуля HTML-анализатора, либо gasp регулярное выражениеТо, что вы ищете, представляет собой набор HTML, который выглядит следующим образом:

    <table>
     <tr>
      <td class=label>This Release</td>
      <td class=cell>&#84;&#101;&#114;&#109;-&#83;&#105;&#122;&#101;-0.203</td>
      <td><small>&nbsp;[<a href="/CPAN/authors/id/F/FE/FERREIRA/Term-Size-0.203.tar.gz">Download</a>]
      [<a href="/src/FERREIRA/Term-Size-0.203/">Browse</a>]&nbsp;</small></td>
    
    
      <td><small>21 May 2006</small>
      </td>
     </tr>
    

    Из этого HTML совершенно очевидно, что вам нужно извлечь содержимое четвертого элемента <td> из строки <tr>, первая ячейка которойсодержит слово «This Release».

    Снимите с него теги <small> и вы получите дату выпуска.

Стоило ли это того?;)

0 голосов
/ 12 ноября 2010

Найдите модуль на search.cpan.org .Перейдите на домашнюю страницу для последней версии модуля, например, для Term :: Size .Эта страница содержит дату выпуска последней версии, а также раскрывающийся список с другими номерами версий и датами выпуска.

...