我花了很多时间在SE上寻找解决方案,但没有遇到过这个问题。
我有一个可以安装在不同位置的Perl脚本“SCRIPT”,但它总是读入本地文件(与脚本在同一个目录中)。如果用户直接调用脚本(la ../../foo/SCRIPT),一切都按预期工作。 Perl脚本找到本地文件。
但是,如果用户创建了一个指向Perl脚本的符号链接(ln -s my_script ../../foo/SCRIPT)并运行sym_link,则sym_linked Perl脚本会在当前目录中查找文件而不是脚本原始位置的本地目录。
我正在试图弄清楚如何确定Perl脚本实际所在的路径。然后我会将其添加到我想要阅读的文件的前面。有什么想法吗?
我试过调用以下内容 -
dirname(__FILE__)
但它们都返回链接的路径,而不是实际的perl脚本。
答案 0 :(得分:2)
use FindBin qw( $RealBin );
见perldoc FindBin。 FindBin
是一个标准模块,可以与Perl一起安装。
答案 1 :(得分:1)
内置readlink
追逐符号链接的实际位置。
readlink EXPR
如果是符号链接,则返回符号链接的值 实现。如果没有,则发出致命错误。如果有的话 系统错误,返回未定义的值并设置$! (错误)。 如果省略EXPR,则使用$ _。
如果输入不是符号链接,则返回undef
。