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

Ric*_*evi 5 directory perl

我注意到-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";
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?

fge*_*fge 12

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


jny*_*len 5

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

if ( -d "$ENV{HOME}/my_dir" ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)