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之外,最好使用词法文件句柄.)