How can I check if a file exists in Perl?

前端 未结 8 2140
忘掉有多难
忘掉有多难 2020-12-01 02:28

I have a relative path

   $base_path = \"input/myMock.TGZ\";

myMock.TGZ is the file name located in input folder. The filenam

8条回答
  •  佛祖请我去吃肉
    2020-12-01 03:00

    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)

提交回复
热议问题