如何更正以下perl程序以检查目录是否存在

时间:2017-06-13 14:45:15

标签: perl

#!/usr/bin/perl

$path = <STDIN>;

if (-e $path) {
    print "present";
}
else {
    print "Not present";
}

为什么总是打印“不存在”?

2 个答案:

答案 0 :(得分:4)

您需要使用chomp

从变量中删除换行符
$path = <STDIN>;
chomp $path;

答案 1 :(得分:1)

  • 你忘了检查EOF。
  • 您忘记删除尾随换行符。
  • 当您无法检查目录是否存在时,您说该目录不存在。

#!/usr/bin/perl

use strict;
use warnings qw( all );

defined( my $path = <STDIN> );
   or exit;

if (-e $path) {
    print "Present";
}
elsif ($!{ENOENT}) {
    print "Not present";
}
else {
    die("stat: $!");
}

最后,首先使用-e可能是错误的。它始终是代码中的错误的症状。在尝试打开文件之前,请勿检查文件是否存在;试着打开它。在尝试创建目录之前,请勿检查目录是否存在;只是尝试创建它。