Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么可以';你没看到这个目录吗?_Perl - Fatal编程技术网

Perl 为什么可以';你没看到这个目录吗?

Perl 为什么可以';你没看到这个目录吗?,perl,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 这里少了什么?我之前做过类似的测试,它可以正确地识

我有以下目录结构:

$ 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

这里少了什么?我之前做过类似的测试,它可以正确地识别目录是否存在。为什么不是这个目录

perl -e 'if (!(-d "analyze")){ print "poo\n"}'
                  ^--     ^---
缺少引号

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

缺少引号

编辑:改为双引号-忘记这是命令行perl的第一个引号

-d analyze
表示“检查文件句柄
anaylyze
是否为目录句柄”。你想要

-d 'analyze'
现在,您说这样做仍然会遇到问题,所以请检查您遇到的错误

my $rv = -d 'analyze';
die "stat: $!" if !defined($rv);
die "Not a dir" if !$rv;
-d
只是
stat(2)
的一个薄薄的包装,所以“看不见”的不是Perl,而是系统

最常见的错误是:

  • 当前工作目录不是您认为的那样。(许多人认为脚本所在的目录始终是它。)
  • 文件名后面有空格,尤其是换行符。(这里不太可能是这种情况。)
  • 首先

    -d analyze
    
    表示“检查文件句柄
    anaylyze
    是否为目录句柄”。你想要

    -d 'analyze'
    
    现在,您说这样做仍然会遇到问题,所以请检查您遇到的错误

    my $rv = -d 'analyze';
    die "stat: $!" if !defined($rv);
    die "Not a dir" if !$rv;
    
    -d
    只是
    stat(2)
    的一个薄薄的包装,所以“看不见”的不是Perl,而是系统

    最常见的错误是:

    • 当前工作目录不是您认为的那样。(许多人认为脚本所在的目录始终是它。)
    • 文件名后面有空格,尤其是换行符。(这里不太可能是这种情况。)

    谢谢,但我试过了,它仍然打印……真是奇怪的行为!我只是想说,如果你用单引号引用代码,你就不能在代码中用它们作为引号<代码>q也应该起作用。;-)@ikegami:是的,但这是在命令行上,所以我的单引号实际上终止了perl代码。@PinkElephantsOnParade:mybad,忘了它是用于CLI perl的。我现在已经用正确的引语更新了答案。谢谢,但我试过了,它仍然打印出…非常奇怪的行为!我只是想说,如果你用单引号引用代码,你就不能在代码中用它们作为引号<代码>q也应该起作用。;-)@ikegami:是的,但这是在命令行上,所以我的单引号实际上终止了perl代码。@PinkElephantsOnParade:mybad,忘了它是用于CLI perl的。我现在用正确的引号更新了答案。也就是说,如果我要在.pl中而不是在命令行中进行此检查,单引号将是正确的方法?@PinkElephantsOnParade,对Perl来说,
    'anaylyze'
    “analyze”
    “\x61analyze”
    之间没有区别。用你想要的。当然,
    “\x61analyze”
    会有所不同。双引号插入并具有许多转义序列,而只有
    \\\
    \'
    在单引号中是特殊的。因此,也就是说,如果我要在.pl中而不是在命令行中进行此检查,单引号将是正确的方法?@PinkElephantsOnParade,对于Perl,
    'analyze'
    “analyze”
    “\x61analyze”
    之间没有区别。用你想要的。当然,
    “\x61analyze”
    会有所不同。双引号插入并具有许多转义序列,而只有
    \\
    \'
    在单引号中是特殊的。