gpt4 book ai didi

perl - 切换到一个目录,然后 getcwd()

转载 作者:行者123 更新时间:2023-12-04 09:43:58 26 4
gpt4 key购买 nike

我的许多同事在他们的 BEGIN block 中使用以下命令。

$scriptDir = dirname($0);
chdir($scriptDir);
$scriptDir = getcwd();

我环顾四周,不禁想到第三行即 $scriptDir = getcwd();是多余的。因为我们已经有了来自 $scriptDir = dirname($0); 的 scriptdir .我在这里错过了什么吗?

最佳答案

dirname($0)不返回完整路径,如 Chankey PathakMatthias
证明。

我想补充一点,还有其他方法。例如,您可以使用 FindBin (也是核心)

use FindBin qw($RealBin);

BEGIN: {
my ($scriptDir) = $RealBin;
chdir $scriptDir or die "Can't change to $scriptDir: $!";
};
$RealBin给出的内容与您显示的内容相同,只是它是已解析链接的完整路径。

chdir可能会失败,感谢 ikegami评论。在这种情况下,会返回 false 并且上面的代码会失效,请根据需要进行调整。请注意,被质疑的第三行与此无关。

这个模块也常用于库的相对路径与 lib杂注,例如
use lib "$RealBin/../lib";

什么可能使两者都使用它更容易决定。

甚至更多,鉴于 dirname来自 File::Basename 的描述(原重点)

This function is provided for compatibility with the Unix shell command dirname(1) and has inherited some of its quirks. In spite of its name it does NOT always return the directory name as you might expect. To be safe, if you want the directory name of a path use fileparse().



我宁愿去
use Cwd qw(abs_path);

BEGIN: {
my ($scriptDir) = abs_path(__FILE__) =~ m|(.*)/|;
chdir $scriptDir
or die "Can't change to $scriptDir: $!";
};

在哪里 abs_path__FILE__ 开始使用其本身可能无法提供完整的路径。正则表达式贪婪地挖出所有内容,直到最后 / ,即脚本所在目录的完整路径。

关于perl - 切换到一个目录,然后 getcwd(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41296378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com