文件测试主要用于查看如文件是否存在、文件大小、文件更新时间等信息。

文件测试操作符

-e  测试文件是否存在;

die "Oops!A file called '$filename' already exists.\n" if -e $filename;

-M 测试文件是否保持持续的更新,比如测试某个程序的日志文件是否保持每一周或两周更新。

此处测试的是文件句柄。

warn "Config file is looking pretty old!\n" if -M CONFIG>28;

-s 测试文件的大小,以字节计算文件大小。

例子:下面测试的是文件大小超过100字节,且更新日期低于两天的本文件夹下的文件。

#!/usr/bin/env perl
#filename:test2.pl
use 5.010;
while(<>)
{
if(/\A-.*/){
my @line=split /\s+/,"$&";
# say "$line[8]";
say "$line[8]\tis bigger than 100bytes."
if -s $line[] > and -M $line[] > ; }
}
运行命令:ls -l | ./<filename>

如何查看文件的大小(以M为单位):my size= (-s $filename)/1024;

注意一定要加括号。

其他的文件测试项

-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”;

}

stat和lstat函数

测试文件的链接个数以及该文件的拥有者的ID。

要么返回空列表,否则就返回一个含有13个元素的数字列表。

my($dev,$ino,$mode,$nlink,$uid,$gid,$rev,

$size,$atime,$mtime,$ctime,$blksize,$blocks)

=stat($filename);

其返回的结果和stat函数返回的列表中对应的数据差不多,可以自行查看。

对于符号连接名调用stat函数将会返回符号链接所指向的对象信息,而非符号连接本身的信息(除非连接所指的对象目前无法访问)。若你需要符号连接本身的信息(多半没用),你可以用lstat(他会返回同样的顺序 同样意义的内容)来代替stat。如果lstat的参数不是符号连接,他会和stat一样返回空列表。

同时,stat和lstat的默认操作数是$_。也就是说,底层的stat系统调用会对标量变量$_里的文件名进行操作。

Localtime函数

通过stat获取的时间戳看起来像这个样子1180630098这种形式。但实在不容看出来表示啥意思。所以需要转换形式,转换成‘Thu May 31 09:48:18 2007’这样的字符串。Perl可以在标量上下文中使用localtime函数完成这种转换:

my $timeswap=1180630098;

my $date=localtime $timeswap;

在列表下文中,localtime会返回一个数字元素组成的列表,但其中有些元素并不是你想要的:

My ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)

=localtime $timestamp;

$mon 的值0~11;

$year 从1900年开始计算,将该值加上1900就是实际的年份;

$wday 0~6;

$yday 则表示目前是今年的第几天,0(1月1号)~364或者365;

gtime函数与localtime函数一样,不过返回的是世界标准时间。

默认情况下是返回当前time返回的时间值:

My $now=gmtime;#取得当前时间的世界标准时间的时间戳字符串

按位运算操作符

& | ^

<<

>>

~

perl学习笔记——文件测试的更多相关文章

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

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

  2. perl学习之文件测试

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

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

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

  4. Perl 学习笔记-文件测试

    1.文件测试操作符 针对文件和目录的测试操作符: -r/-w/-x/-o: 文件或目录, 对有效的(负责运行这个程序的)用户或组来说是可读/写/执行/拥有 的; 这些测试位会查看文件的权限位, 以此判 ...

  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. DRF基类APIView的子类GenericAPIView

    DRF的基类是APIView类,GenericAPIView类是APIView类的子类. GenericAPIView类有什么存在的意义呢? 其实, 他主要提供了两个用处: 1.提供关于数据库查询的属 ...

  2. python的内存管理机制(zz)

    本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...

  3. maven基本知识

    maven的文件夹: projectName src -main -java -package -test -java     -package  -resource maven的命令: mvn - ...

  4. Linux下如何批量转码iconv

    来源:http://hi.baidu.com/curioz/blog/item/2555863514f9491d90ef390d.html 下载了不少文本txt,如verycd上的致纯书苑,解压看看是 ...

  5. C#给IIS添加禁止IP限制

    /// <summary> /// 给IIS添加禁止IP限制 /// 仅针对iis 7及以上版本 /// 首先需要引入Microsoft.Web.Administration.dll // ...

  6. Lookup 组件用法全解

    Lookup是查找的意思,Lookup组件实现两个数据源的连接,和Join语句实现的功能类似,使用Lookup 组件需要配置: 两个输入:一个是上游数据流的输入Source Table,一个是要查找的 ...

  7. LaTeX需要renewcommand的地方

    发现了两篇关于\renewcommand的文章,希望大家有更好的建议,请多多指教! 文章来源:http://blog.csdn.net/loveaborn/article/details/915205 ...

  8. aoj 0033 Ball【dfs/枚举】

    有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...

  9. 51nod 1240 莫比乌斯函数【数论+莫比乌斯函数】

    1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用 ...

  10. DP 贪心【p2134】百日旅行

    Background 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场大考时默默的支持, ...