如何在Perl中找到被require的文件的文件名?

9

如何在被require的文件中找到文件名?我可以查看%INC来找到所有已加载文件的名称,但我正在寻找类似于$0的东西,它可以作为%INC的键。


我很好奇你为什么想这样做。我一直在努力想出一个用例,除了找到文件的位置,或者在动态生成的类中使用它之外。 - brian d foy
该文件是一个配置文件,需要从程序中引入,并且我希望该配置文件可以引入位于同一目录下的其他配置文件。你说得对,在普通的Perl“编程”中,你可能不需要这个。 - Peter Eisentraut
你有配置文件散布在不同的位置吗?为什么不使用use lib "/my/conf/dir"来避免繁琐操作呢? - Greg Bacon
为此,我需要知道目录,该目录可通过 FILE 的 %INC 获得。因此有了这个问题 :) 我不想硬编码目录名称。 - Peter Eisentraut
@briandfoy 刚刚发现了一个用例:我在 PSGI 应用程序中,想要相对于可执行文件使用 use lib$0 指向 PSGI 服务器,在我的情况下是 Twiggy。 - Dallaylaen
1个回答

9

1
彼得:这并不完全出乎意料。$foo {bar} 也会自动引用。FILE 看起来像任何其他标识符。常量也存在类似的问题。 - tsee
3
如果你需要在哈希表中使用__FILE__,可以使用$INC{''.__FILE__}。这样虽然需要多打一点字,但可以实现你的目的。你只需要加入一个非单词字符即可。 - Axeman
@tsee:是的,但对于常量,您可以在末尾添加()使它们进行评估:MY_CONSTANT_PI()(不在字符串中)。 - Axeman
5
避免裸字自动引用的 Perl 方式是使用一元加号运算符:$INC{+__FILE__} 可行。 - hobbs
1
@hobbs:我现在要去挖出我的眼睛了。是非常难懂的代码。 - Paul Nathan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接