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 に答える