| | 文件测试操作符 | 含义 
 |  | -r | 文件或目录,对当前(有效的)用户或组来说是可读的 
 |  | -w 
 | 文件或目录,对当前(有效的)用户或组来说是可写的 |  | -x 
 | 文件或目录,对当前(有效的)用户或组来说是可执行的 |  | -o 
 | 文件或目录,由当前(有效的)用户所拥有 |  | -R 
 | 文件或目录,由当前实际的用户或组来说是可读的 |  | -W 
 | 文件或目录,由当前实际的用户或组来说是可写的 |  | -X 
 | 文件或目录,由当前实际的用户或组来说是可写的 |  | -O 
 | 文件或目录,由实际的用户所拥有 
 |  | -e 
 | 文件或目录,是存在的, 
 |  | -z 
 | 文件存在而且没有内容(对目录来说永远为假) 
 |  | -s 
 | 文件或目录存在而且有内容(返回值是以字节为单位的文件大小) 
 |  | -f 
 | 为普通文件 
 |  | -d 
 | 为目录 
 |  | -l 
 | 为符号链接 
 |  | -S 
 | 为 socket 类型文件 
 |  | -p 
 | 命名管道,先入先出的 fifo 队列 
 |  | -b 
 | 块设备文件(比如某个挂载的磁盘) 
 |  | -c 
 | 字符设备文件(比如某个 I/O 设备) 
 |  | -u 
 | 文件或目录设置了 setuid 位 
 |  | -g 
 | 文件或目录设置了 setgid 位 
 |  | -k 
 | 文件或目录设置了 sticky 位 
 |  | -t 
 | 文件句柄时候 TTY 设备(不能对文件名进行此测试) 
 |  | -T 
 | 看起来像是文本文件 
 |  | -B 
 | 看起来像是二进制文件 
 |  | -M 
 | 最后一次修改后到至今的天数 
 |  | -A 
 | 最后一次访问到至今的天数 
 |  | -C 
 | 最后一次文件节点编号(inode)变更后到至今的天数 
 | 
 上面,-T 和 -B 两个测试项测试某个文件是文本文件还是二进制文件。之所以说是“看起来像”,那是因为在类 Unix 的系统里,没有任何标志或为会告诉你该文件是个二进制还是文本文件,而 Perl 则是通过“作弊” 的方法来猜测它是否是文本文件还是二进制文件。这个作弊是通过打开文件后并检查开头的几千个字节,然后做出一个合理的猜测。比如它如果看到许多空字节,以及不寻常的控制字符并且还设定了高位的字节,那么改文件看起来就像是个二进制文件。然而,这并不是绝对的准确,在某些文本(如法文或瑞典文)可能会让 Perl 误判。
 
 也不能认为 -T 和 -B 的判断结果必然相反,即要么是文本文件要么是二进制文件。比如,如果文件不存在,那么两者都会返回假,因为它既不是文本文件也不是二进制文件。在空文件的情况下,两者都会返回真,因为它既是空的文本文件也是空的二进制文件。
 
 可以一次性用多个属性来测试一个文件:
 
 [Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$file = "hello.txt";
if (-r -w $file) {
        print "$file is readable and writeable.\n";
}假设当前目录下已有一 hello.txt 文件并,那么运行输出:
 # ls -al hello.txt-rw-r--r-- 1 root root 12 2011-10-10 22:53 hello.txt
 # ./test.pl
 hello.txt is readable and writeable.
 |