妄徒之命 2010-04-08 15:09 采纳率: 100%
浏览 926
已采纳

如何检查 Perl 中是否存在文件?

I have a relative path

   $base_path = "input/myMock.TGZ";

myMock.TGZ is the file name located in input folder. The filename can change. But the path is always stored in $base_path.

I need to check if the file exists in $base_path.

转载于:https://stackoverflow.com/questions/2601027/how-can-i-check-if-a-file-exists-in-perl

  • 写回答

8条回答 默认 最新

  • MAO-EYE 2010-04-08 15:10
    关注

    Test whether something exists at given path using the -e file-test operator.

    print "$base_path exists!\n" if -e $base_path;
    

    However, this test is probably broader than you intend. The code above will generate output if a plain file exists at that path, but it will also fire for a directory, a named pipe, a symlink, or a more exotic possibility. See the documentation for details.

    Given the extension of .TGZ in your question, it seems that you expect a plain file rather than the alternatives. The -f file-test operator asks whether a path leads to a plain file.

    print "$base_path is a plain file!\n" if -f $base_path;
    

    The perlfunc documentation covers the long list of Perl's file-test operators that covers many situations you will encounter in practice.

    • -r
      File is readable by effective uid/gid.
    • -w
      File is writable by effective uid/gid.
    • -x
      File is executable by effective uid/gid.
    • -o
      File is owned by effective uid.
    • -R
      File is readable by real uid/gid.
    • -W
      File is writable by real uid/gid.
    • -X
      File is executable by real uid/gid.
    • -O
      File is owned by real uid.
    • -e
      File exists.
    • -z
      File has zero size (is empty).
    • -s
      File has nonzero size (returns size in bytes).
    • -f
      File is a plain file.
    • -d
      File is a directory.
    • -l
      File is a symbolic link (false if symlinks aren’t supported by the file system).
    • -p
      File is a named pipe (FIFO), or Filehandle is a pipe.
    • -S
      File is a socket.
    • -b
      File is a block special file.
    • -c
      File is a character special file.
    • -t
      Filehandle is opened to a tty.
    • -u
      File has setuid bit set.
    • -g
      File has setgid bit set.
    • -k
      File has sticky bit set.
    • -T
      File is an ASCII or UTF-8 text file (heuristic guess).
    • -B
      File is a “binary” file (opposite of -T).
    • -M
      Script start time minus file modification time, in days.
    • -A
      Same for access time.
    • -C
      Same for inode change time (Unix, may differ for other platforms)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog