我注意到-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";
}
有什么区别?
答案 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。