如何确定符号链接的perl脚本的位置?

时间:2015-05-06 17:17:02

标签: perl

我花了很多时间在SE上寻找解决方案,但没有遇到过这个问题。

我有一个可以安装在不同位置的Perl脚本“SCRIPT”,但它总是读入本地文件(与脚本在同一个目录中)。如果用户直接调用脚本(la ../../foo/SCRIPT),一切都按预期工作。 Perl脚本找到本地文件。

但是,如果用户创建了一个指向Perl脚本的符号链接(ln -s my_script ../../foo/SCRIPT)并运行sym_link,则sym_linked Perl脚本会在当前目录中查找文件而不是脚本原始位置的本地目录。

我正在试图弄清楚如何确定Perl脚本实际所在的路径。然后我会将其添加到我想要阅读的文件的前面。有什么想法吗?

我试过调用以下内容 -

  • dirname(__FILE__)
  • 绝对路径()
  • CWD
  • 目录名(绝对路径($ 0))
  • CWD:CWD()
  • CWD :: abs_rath()
  • 文件:基名:: fileparse($ 0)
  • CWD:真实路径($ 0)

但它们都返回链接的路径,而不是实际的perl脚本。

2 个答案:

答案 0 :(得分:2)

use FindBin qw( $RealBin );

perldoc FindBinFindBin是一个标准模块,可以与Perl一起安装。

答案 1 :(得分:1)

内置readlink追逐符号链接的实际位置。

  

readlink EXPR

     

如果是符号链接,则返回符号链接的值                  实现。如果没有,则发出致命错误。如果有的话                  系统错误,返回未定义的值并设置$! (错误)。                  如果省略EXPR,则使用$ _。

如果输入不是符号链接,则返回undef