Получить текущий путь рабочего каталога в Perl - PullRequest
2 голосов
/ 29 марта 2012

Я получаю местоположение сценария Perl, используя $FindBin::RealBin. Теперь у меня есть проблемы с использованием этого. Я вызываю Perl-скрипт из одного Perl-скрипта. В скрипте вызывающего абонента $FindBin::RealBin работает нормально, но в вызываемом скрипте Perl он не указывает местоположение. Я что-то упустил?

Ответы [ 3 ]

5 голосов
/ 29 марта 2012

Это то, что я всегда использую:

my ($vol,$script_path, $prog) = File::Spec->splitpath(File::Spec->rel2abs( __FILE__ ));

Проверьте, работает ли оно в вашем случае. Это должно работать, если вы вызываете свой внутренний скрипт как вызов оболочки. Я не знаю, сработает ли это, если вы позвоните с do.

Некоторые чтения об этом:

см. Как получить полный путь к исполняемому Perl-скрипту?

FindBin :: Корзина не работает http://use.perl.org/~Aristotle/journal/33995 (или кеш Google http://webcache.googleusercontent.com/search?q=cache:y-5OZsxdTT8J:use.perl.org/~Aristotle/journal/33995)

File :: Basename http://perldoc.perl.org/File/Basename.html более проблематично

Надеюсь, это поможет

2 голосов
/ 29 марта 2012

Поскольку вы не предоставили полный пример кода, это скорее предположение.
Согласно документации , вам необходимо позвонить

FindBin::again();

, поскольку это известное ограничение FindBin.

0 голосов
/ 29 марта 2012

Если я понимаю ваш вопрос, вы можете использовать realpath из Cwd .

$ cat ./mycode
#!/usr/bin/env perl
use strict;
use warnings;
use Cwd;
print "called as '$0'\n";
print "lives  in '", Cwd::realpath($0), "'\n";

$ ./mycode
called as './mycode'
lives  in '/Users/jrf/Sandbox/mycode'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...