Чем использование local :: lib отличается от использования lib? - PullRequest
8 голосов
/ 26 января 2011

Я не понимаю, что use local::lib делает то, что обычные use lib не делают. Может ли кто-нибудь объяснить это?

Ответы [ 3 ]

19 голосов
/ 26 января 2011

local::lib

  1. По умолчанию ~/perl5, если вы не указали каталог (в то время как use lib; не используется).

  2. Разрешает относительные пути к абсолютным путям перед добавлением их в @INC. (lib просто добавляет относительный путь как есть.)

  3. Расширяет ~ и ~user в имени каталога.

  4. Добавляет /lib/perl5 в указанную вами директорию. (То есть use local::lib '/foo'; в некоторой степени эквивалентно use lib '/foo/lib/perl5';.)

  5. Предварительно добавляет DIR/bin к вашей переменной PATH, чтобы вы могли использовать сценарии, установленные локальными модулями.

5 голосов
/ 26 января 2011

use lib добавляет каталог в путь поиска вашего модуля (@INC). Он не влияет ни на что, кроме программы или модуля, содержащего директиву use lib.

local::lib предназначен для включения каталога установки частного модуля и, если вы конфигурируете среду оболочки так, как она рекомендует, этот частный каталог будет использоваться для всех установок модуля Perl (будь то через CPAN или вручную make install) и установленные там модули будут доступны всем программам / модулям Perl, запущенным из вашей local::lib -защищенной оболочки.

3 голосов
/ 26 января 2011

Regular use lib foo почти так же просто, как:

BEGIN { unshift(@INC, foo) }

Принимая во внимание, что use local::lib устанавливает множество других переменных среды Perl, чтобы убедиться, что вы можете устанавливать модули локально, см. Источник.

...