使用Perl检查〜/中是否存在目录

时间:2013-05-23 15:57:28

标签: perl directory

我注意到-d标志的奇怪行为,以检查文件是否是目录以及目录是否存在。使用~/my_dir作为我的路径时,它的行为会有所不同。

以下代码将返回false,即使目录my_dir存在,但如果我将其更改为/home/ricky/my_dir之类的完整路径,那么if语句将返回true。

#!/usr/bin/perl -w
#
use strict;

if ( -d "~/my_dir") {
    print "Found \n";
}
else {
    print "Not found \n";
}

有什么区别?

3 个答案:

答案 0 :(得分:12)

~是一个 shell 快捷方式,用于指示主目录,perl不知道。您必须在此处使用环境变量HOME - 例如使用"$ENV{HOME}/my_dir"

答案 1 :(得分:5)

~不是真正的道路。诸如/bin/bash之类的shell将其扩展为$HOME环境变量的值。 Perl没有。所以,你应该使用这样的东西:

if ( -d "$ENV{HOME}/my_dir" ) {
    ...
}

答案 2 :(得分:-2)

您也可以通过执行chdir命令来检查。 chdir" dir_name"如果目录不存在,将返回0。如果目录存在,则为1。