Пожалуйста, используйте пост-запрос AJAX для удаления по коду.
Стандартный модуль FindBin
делает то, что вы хотите.
use FindBin;
use lib "$FindBin::Bin/../lib";
perldoc FindBin
для получения дополнительной информации.
Разобрать полный путь к вашему .pl
через __ FILE __
и, затем, прикрепите ../ lib
в конце или вытолкните последний элемент из split ( / \ //, __ FILE __)
и добавьте к этому / lib
.
I generally use this technique. Its sadly inspired from my PHP days:
Its handy in situations where you know where a given file will be relative to the current one, and aren't sure of the entry points it may be called in or the surrounding environment at calltime.
However, I would generally use this technique only for test scripts which need dummy libraries for emulating things.
use File::Basename ();
use Cwd ();
my $base_dir;
my $relative_path;
BEGIN {
$realitive_path = '../../' # Path to base of project relative to the current file
$base_dir = Cwd::realpath( File::Basename::dirname(__FILE__) .'/' . $relative_path );
}
use lib "${base_dir}/lib";
use Foo;
Ideally there should be some module somewhere that does this, if not, I'm half tempted to write one:
use Some::Module ();
use lib Some::Module::relative_self('../../lib', __FILE__ );
Модуль «FindBin» будет работать только в том случае, если каталог, в котором находится скрипт perl, находится в вашей системной переменной PATH, в противном случае произойдет сбой. Чтобы преодолеть это , вы можете манипулировать значением $ 0
, чтобы получить информацию о вашем пути к модулю perl и передать значение в , используя lib
.
Что-то вроде этого -
BEGIN {
use File::Spec::Functions qw(rel2abs);
use File::Basename qw(dirname);
#Covert the script path to absolute and get its directory name
our $path = dirname( rel2abs($0) );
#Replace the bin tag with lib to get module directory
$path =~ s{bin/?$}{lib};
}
use lib $path;
EDIT: Модуль FindBin работает просто отлично и может использоваться, как описано в Ответ Михаэля . Мое понимание его работы было неполным и поэтому заставило меня сделать первый комментарий, от которого я сейчас отказываюсь. В любом случае, я не вижу причин, почему этот метод не должен работать, хотя с несколькими строками больше, чем можно было бы достичь с помощью FindBin (TMTOWTDI).
Как насчет:
BEGIN: {
push @INC, '/full/path/to/lib';
}
Для создания относительной ссылки предполагается, что вы сохраните ее в каталоге bin, поэтому вместо нее вставьте относительную ссылку.