1.文件测试操作符

  针对文件和目录的测试操作符:

    -r/-w/-x/-o: 文件或目录, 对有效的(负责运行这个程序的)用户或组来说是可读/写/执行/拥有 的; 这些测试位会查看文件的权限位, 以此判断哪些操作是允许的, 如果系统使用访问控制列表(ACL), 那么测试就按列表进行判断, 但是只是测试结果只是操作系统的看法, 但是受实际情况限制, 运行的事未必可行, 如空文件运行运行, 但是并没有什么意义.

    -R/-W/-X/-O: 文件或目录, 对实际的用户或组来说是可读/写/执行/拥有 的; 使用的是实际用户或组的ID, 这在程序以set-ID方式运行时相当重要.

    -e: 文件或目录, 是存在的

    -z: 文件存在但无内容(对目录来说永远为假)

    -s: 文件或目录存在且有内容, 返回以字节为单位的文件大小

    -f: 是普通文件

    -d: 是目录

    -l: 是符号链接

    -S: 是socket类型的文件

    -p: 是命名管道, 也就是FIFO队列

    -b: 是块设备文件 (如某个可挂载的磁盘)

    -c: 是字符设备文件 (如某个I/O设备)

    -u/-g/-k: 文件或目录设置了setuid/setgit/sticky位

    -t: 文件句柄是TTY设备(类似系统函数isatty()的测试, 不能对文件名进行此测试);  如果文件可以交互就会判断为TTY设备,  所以普通文件或管道都可以排除在外, 当  -t STDIN 返回真的时候, 通常意味着可以用交互的方式向用户提出一些问题, 若为假, 则表示输入来源是个普通文件或管道, 而不是键盘.

    -T/-B: 看起来像是文本文件/二进制文件(因为判断并不是很准确)

    -M/-A/-C: 最后一次  修改后/访问后/文件节点编号变更后  至今的天数

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

   if(-r $filename and -w $filename){} 操作会2次获取同一个文件的属性, 比较浪费.  可以使用虚拟文件句柄  _ 来告诉Perl用上次查询过的文件信息来做当前的测试.  if(-r $filename and -w _){} , 只要是查询上一次获取到的同一个文件的属性信息, 那么在其他地方也可以使用这个虚拟文件句柄.

3.栈式文件测试操作.

  可以一次测试多个文件的属性,靠近文件名的测试会先执行,次序为从右往左,不过通常来说测试次序不是很重要。 if(-r -w -x -o -d $filename){}

  对于返回真假值以外的测试来说,栈式写法并不出色。例如,想要确认某个小于512字节的目录:  if(-s -d $filename < ){} 这样写就不对, 等同于 if((-d $filename and -s _)<){}。因为文件测试返回布尔值和512比较的。

4. stat 和 last  函数

  通过文件测试操作符可以获取某个文件或文件句柄的常用属性, 但是并不能获取文件链接数和拥有者ID等等, 可以使用stat函数, 如果执行失败(通常是无效文件名或不存在) 返回空列表, 成功返回13个数字元素的列表.

my($dev,$ino,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, $blksize,$blocks) = stat($filename);

  $dev 和 $ino: 文件所在设备的编号和与文件的inode编号, 这两个编号决定文件的唯一性. 即使它具有不同的文件名(使用硬链接创建), 这个组合依然是唯一的.

  $mode : 文件的权限位集合, 八进制

  $nlink: 文件或目录的硬链接数, 也就是这个条目有多少个真实的名称.

  $uid 和 $gid : 文件拥有者的用户编号以及组ID.

  $size: 以字节为单位的文件大小.

  $atime, $mtime, $ctime: 3种时间戳

5. localtime()

  使用 stat 等函数获得的时间戳值可以用 localtime 函数转换为容易让人阅读的形式.

my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=localtime($timestamp);

  返回值: $mon 是从0 开始计数的, 所以正确的值应该+1;  年份是从1900年至今的年份, 所以正确值应该+1900;  $yday 指目前是今年的第几天,范围从(0-365),从1月1日计算到12月31日.

  类似函数:

     gmtime()和localtime()  返回世界标准时间(格林威治时间)

     time() 获取当前时间戳

6.按位运算操作符.

  按位与或非左移右移异或, 完全和C相同.

  使用位字符串: 按位操作符可以操作整数(至少32位)和 位字符串 ,  如果按位运算的任意一个操作数是字符串, 则Perl会当成位字符串处理, 如:  "\xAA" | "\x55";  结果是:  "\xFF" ; 这是在Perl中少数区分字符串和整数的地方.

    

Perl 学习笔记-文件测试的更多相关文章

  1. perl学习笔记——文件测试

    文件测试主要用于查看如文件是否存在.文件大小.文件更新时间等信息. 文件测试操作符 -e  测试文件是否存在: die "Oops!A file called '$filename' alr ...

  2. linux shell 学习笔记--文件测试符

    . 文件测试操作 ---------------- 返回true 如果... -e 文件存在 -a 文件存在 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用 -f file 是一个re ...

  3. perl学习之文件测试

    用Open() 函数打开文件 打开文件的常用方法是: open(FH, "< $filename") or die "Couldn't open $filename ...

  4. 《python基础教程(第二版)》学习笔记 文件和素材(第11章)

    <python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...

  5. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  6. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  7. Perl 学习笔记-正则表达式处理文本

    1.使用正则表达式替换文本  s///  s/<pattern>;/<replacement>;/ 如果匹配失败, 则什么也不会发生, 变量也不受影响. 返回布尔值, 替换成功 ...

  8. Web安全测试学习笔记 - 文件包含

    基础知识 文件包含指的是一个文件动态引用另一个文件,这是一种非常灵活的动态调用方式.有点类似Java引用jar包,但区别在于jar包引用后一般是固定不变的(一般不能动态改变所引用的jar包名称),而文 ...

  9. Hyperledger Fabric 2.2 学习笔记:测试网络test-network

    写在前面 最近被Hyperledger Fabric折磨,归根结底还是因为自己太菜了qwq.学习路漫漫,笔记不能少.下面的步骤均是基于已经成功搭建了Fabric2.2环境,并且拉取fabric-sam ...

随机推荐

  1. appium+python自动化37-adb shell模拟点击事件(input tap)

    前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...

  2. 10 删除topic中的数据

    1 打开    server.properties2  添加一条:  delete.topic.enable=true 3  执行命令:   bin/kafka-topics.sh --delete ...

  3. JAVA访问控制变量、类变量、类方法

    1.私有:同类中 2.默认:同包中的类 3.保护:同包中的类  子类中(继承性) 4.公有:无范围 创建子类并覆盖方法时,必须考虑原来方法的访问控制: 作为通用的规则,覆盖方法是,新方法的访问控制不能 ...

  4. UVa-146 - ID Codes(下一个排列)

    /* ID Codes It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  5. cocos2dx切换播放的动画

    版本:cocos2dx 2.2.6 IDE: VS2012 语言:C++98 美术资源一共有两段动画的序列帧,一个是手绘马行走图,一个是分子人行走图. 程序要实现的目的就是在同一个位置,点击按钮可以实 ...

  6. Python操作中缓存Redis

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  7. 获取当前UnixTime的零点时间戳

    最近有个需求,开屏广告每天只出一次. 思路为如果出了开屏广告,则记录当前时间,下次来的时候,读取当前时间和上一次出开屏的时间. 算一下是不是在同一天即可. 我们的第一个想法是将上次开屏时间和当前时间归 ...

  8. NSTimer类的使用

    转载于:http://www.cnblogs.com/wujian1360/archive/2011/09/05/2167992.html 创建一个 Timer + scheduledTimerWit ...

  9. MySQL数据库篇之表的增删改查

    主要内容: 一.表介绍 二.创建表 三.查看表结构 四.修改表结构 五.复制表 六.删除表 1️⃣ 表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称 ...

  10. jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

    jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat5下jsp中出现此错误一般都是在js ...