我使用$FindBin::RealBin
获取perl脚本位置。现在我有一个使用它的问题。
我从一个Perl脚本调用Perl脚本。
在调用者脚本中,$FindBin::RealBin
工作正常,但在调用的Perl脚本中,它没有给出位置。
我错过了什么吗?
答案 0 :(得分:5)
这就是我经常使用的:
my ($vol,$script_path, $prog) = File::Spec->splitpath(File::Spec->rel2abs( __FILE__ ));
检查它是否适用于您的情况。如果将内部脚本称为shell调用,它应该可以工作。如果你用do
调用它,我不知道它是否有用。
关于此的一些解读:
请参阅How do I get the full path to a Perl script that is executing?
FindBin :: Bin已损坏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更有问题
希望有所帮助
答案 1 :(得分:2)
由于您未提供完整的代码示例,因此更多猜测。
根据{{3}},您需要致电
FindBin::again();
因为这是FindBin的已知限制。
答案 2 :(得分:0)
如果我理解了您的问题,您可以使用Cwd中的realpath
。
$ 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'