5

我注意到-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";
}

有什么不同?

4

3 回答 3

12

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

于 2013-05-23T15:59:55.980 回答
5

~不是真正的路径。Shells 等/bin/bash将其扩展为$HOME环境变量的值。Perl 没有。所以,你应该改用这样的东西:

if ( -d "$ENV{HOME}/my_dir" ) {
    ...
}
于 2013-05-23T15:59:06.280 回答
-2

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

于 2015-03-09T12:42:01.303 回答