perl中的相对文件路径

时间:2012-03-01 12:41:06

标签: perl file-io relative-path

我有一个使用相对文件路径的perl脚本。

相对路径似乎是相对于脚本执行的位置而不是perl脚本的位置。如何创建相对于脚本位置的相对路径?

例如,我有一个目录结构

dataFileToRead.txt
->bin
  myPerlScript.pl
->output

在perl脚本中我使用代码打开dataFileToRead.txt     my $ rawDataName =“../ dataFileToRead.txt”;     打开INPUT,“<”,$ rawDataName;

如果我从bin目录运行perl脚本,那么它可以正常工作

如果我从父目录运行它,则无法打开数据文件。

4 个答案:

答案 0 :(得分:13)

FindBin是您问题的经典解决方案。如果你写

use FindBin;

然后标量$FindBin::Bin是Perl脚本位置的绝对路径。您可以在打开数据文件之前chdir,或者只在要打开的文件的路径中使用它

my $rawDataName = "$FindBin::Bin/../dataFileToRead.txt";
open my $in, "<", $rawDataName;

(顺便说一下,除了非常旧的perl之外,最好使用词法文件句柄。)

答案 1 :(得分:3)

要将相对路径转换为绝对路径,您可以使用Cwd

use Cwd qw(realpath);
print "'$0' is '", realpath($0), "'\n";

答案 2 :(得分:1)

finding out where the script is开始。

然后获取它所在的目录。您可以使用Path::Class::Filedir()方法。

最后,您可以使用chdir将当前工作目录更改为您刚刚识别的目录。

所以,理论上:

chdir(Path::Class::File->new(abs_path($0))->dir());

答案 3 :(得分:0)

相对路径相对于当前working directory。如果您对工作目录没有任何控制权,那么您需要找到一种更强大的方法来对文件路径进行分类,例如:使用绝对路径,或者可能是相对于文件系统中某个特定位置的相对路径。