文件测试操作符

作者: JSON_NULL | 来源:发表于2018-02-24 13:47 被阅读10次

    -r:文件或目录对此(有效的)用户(effective user)或组是可读的
    -w:文件或目录对此(有效的)用户或组是可写的
    -x:文件或目录对此(有效的)用户或组是可执行的
    -o:文件或目录由本(有效的)用户所有
    -R:文件或目录对此用户(real user)或组是可读的
    -W:文件或目录对此用户或组是可写的
    -X:文件或目录对此用户或组是可执行的
    -O:文件或目录由本用户所有
    -e:文件或目录名存在
    -z:文件存在,大小为0(目录恒为false)
    -s:文件或目录存在,大小大于0(值为文件的大小,单位:字节)
    -f:为普通文本
    -d:为目录
    -l:为符号链接
    -S:为socket-p 为管道(Entry is a named pipe(a“fifo”))
    -b:为block-special 文件(如挂载磁盘)
    -c:为character-special 文件(如I/O 设备)
    -u:setuid 的文件或目录
    -g:setgid 的文件或目录
    -k:File or directory has the sticky bit set
    -t:文件句柄为TTY(系统函数isatty()的返回结果;不能对文件名使用这个测试)
    -T:文件有些像“文本”文件
    -B:文件有些像“二进制”文件
    -M:修改的时间(单位:天)
    -A:访问的时间(单位:天)
    -C:索引节点修改时间(单位:天)

    测试同一个文件的多项属性

    if(-r $file and -w _) # 虚拟文件句柄 _
    {...}
    

    栈式文件操作符

    use 5.010;
    if( -r -w -x -o -d $file){
    

    print "My directory is readable,writable,and executable!\n";
    }

    对于返回真假值以外的测试来说,栈式的写法并不出色。像下面的例子,我们原本是想操作某个512字节的目录,可实际上会出问题:

    use 5.010;
    if (-s -d $file <512){
        say ‘The directory is less than 512 bytes’;
    }
    

    如果按照其内部的现实方式展开,我们可以看到上面的例子实际上相当于如下的写法,整个合并起来的文件测试表达成了比较运算的一个操作数:

    if ((-d $file and -s _)<512){
        print “The directory is less than 512 bytes!\n”;
    }
    

    当-d返回为假时,Perl将假值同数字512作比较。比较的结果就变为真,因为假等效为数字0,而0永远小于512。为了避免出现着这种错误,我们还是分开来写比骄傲好。

     if (-d $file and -s _ <512){
          print “The directory is less than 512 bytes!\n”;
     }
    

    相关文章

      网友评论

        本文标题:文件测试操作符

        本文链接:https://www.haomeiwen.com/subject/lopqxftx.html