2012-07-19 31 views
1

我有这样的目录结构:为什么Perl不能看到这个目录?

$ 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

这里缺少什么?我之前已经完成了像这样的测试,它会正确识别该目录是否存在。为什么不是这个目录?

+1

添加'-w'来查看警告消息。 – toolic 2012-07-19 15:18:47

回答

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

想找你报价?

编辑:更改为双引号 - 忘了这是为命令行的perl

+0

谢谢,但我试过了,它仍然打印......真奇怪的行为! – PinkElephantsOnParade 2012-07-19 15:15:29

+0

Facepalm ...使用双引号...... – PinkElephantsOnParade 2012-07-19 15:15:57

+0

我只是想说,如果您使用单引号引用代码,则不能将它们用作代码中的引号。 'q'也应该有效。 ;-) – simbabque 2012-07-19 15:17:55

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说:“看不到”,它的系统。

最常见的错误:

  • 当前的工作目录是不是你认为它是。 (许多人认为它始终是脚本所在的目录。)
  • 文件名后有空格,特别是换行符。 (这可能不是这种情况。)
+0

那么,也就是说,我要在.pl而不是在命令行中进行此检查,单引号是正确的方式吗? – PinkElephantsOnParade 2012-07-19 15:24:47

+0

@PinkElephantsOnParade,对于Perl,“anaylyze”和“”分析“'和'”\ x61nalyze“'没有区别。使用你想要的。当然,'\ x61nalyze''会有所不同。双引号内插并有许多转义序列,而只有'\\'和'\''在单引号中是特殊的。 – ikegami 2012-07-19 15:27:45