perl中的相对文件路径

Dun*_*unc 7 perl file-io relative-path

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

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

例如,我有一个目录结构

dataFileToRead.txt
->bin
  myPerlScript.pl
->output
Run Code Online (Sandbox Code Playgroud)

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

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

如果我从父目录运行它,那么它无法打开数据文件.

Bor*_*din 13

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

use FindBin;
Run Code Online (Sandbox Code Playgroud)

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

my $rawDataName = "$FindBin::Bin/../dataFileToRead.txt";
open my $in, "<", $rawDataName;
Run Code Online (Sandbox Code Playgroud)

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