1

我有这个目录结构:

$ ls -F
analyze/
data.pl
input.pl
logminer.txt
logSearch.pl
readFormat.pl
Version Notes.txt
datadump.pl
format/
logminer.pl
logs/
properties.txt
unzip.exe

我跑:

perl -e 'if (!(-d analyze)){ print "poo\n"}'

它打印出来poo

这里缺少什么?我之前做过这样的测试,它会正确识别目录存在。为什么不是这个目录?

4

2 回答 2

5
perl -e 'if (!(-d "analyze")){ print "poo\n"}'
                  ^--     ^---

缺少引号?

编辑:更改为双引号 - 忘记这是用于命令行 perl

于 2012-07-19T15:14:43.013 回答
2

第一的,

-d analyze

意思是“检查文件句柄 anaylyze是否是目录句柄”。你要

-d 'analyze'

现在,您说这样做仍然会遇到问题,因此请检查您遇到的错误。

my $rv = -d 'analyze';
die "stat: $!" if !defined($rv);
die "Not a dir" if !$rv;

-d只是对 的一个薄包装stat(2),所以不是Perl “看不见”,而是系统。

最常见的错误:

  • 当前的工作目录不是你想象的那样。(许多人认为它始终是脚本所在的目录。)
  • 文件名有尾随空格,尤其是换行符。(这里不太可能是这种情况。)
于 2012-07-19T15:17:31.037 回答