Perl-文件测试

上一篇 / 下一篇  2015-01-11 08:17:42 / 个人分类:Perl

通常,打开文件的操作会直接创建一个新文件,如果存在同名的文件的话,还会清空该该文件的内容。所以操作文件时需要对文件进行一些检测
文件测试操作符
Perl提供了一组测试文件的操作符,借此返回特定的文件信息。所有这些测试操作符都写作-X的形式,其中X表示特定的测试操作。绝大多数测试操作符返回布尔真假值
-e
在运行会创建文件的程序前,应先检查指定文件是否已经存在,以免意外覆盖文件,
if -e $filename;
-M
-M文件测试操作符返回的是文件最后一次修改时间到当前程序启动时刻之间的天数。测试的是一个已经存在的文件句柄,而非文件名的字符串
if -M CONFIG>28;
-s 
-s文件操作符返回的并不是布尔真假值,而是以字节计算的文件大小(已经存在的空文件大小可以使零字节)
-r 文件或目录,对目前(有效的)用户或组来说是可读的
-w 文件或目录,对目前(有效的)用户或组来说是可写的
-x 文件或目录,对目前(有效的)用户或组来说是可执行的
-o 文件或目录,对目前(有效的)用户拥有
-R 文件或目录,对实际的用户或组来说是可读的
-W 文件或目录,对实际的用户或组来说是可写的
-X 文件或目录,对实际的用户或组来说是可执行的
-O 文件或目录,对实际的用户拥有
-e 文件或目录,是存在的
-z 文件存在而且没有内容(对目录来说永远为假)
-s 文件或目录存在而且有内容(返回值是以字节为单位的文件大小)
-f 是普通文件
-d 是目录
-l 是符号链接
-S 是socket类型的文件
-p 是命名管道,也就是先入先出队列
-b 是块设备文件(比如某个可挂载的磁盘)
-c 是字符设备文件(比如某个I/O设备)
-u 文件或目录设置了 setuid位
-g 文件或目录设置了 setgid位
-k 文件或目录设置了 sticky位
-t 文件句柄是TTY设备(类似系统函数isatty()的测试,不能对文件名进行测试)
-T 看起来像文本文件
-B 看起来像二进制文件
-M 最后一次被修改到今天的天数 
-A 最后一次被访问到几天的天数
-C 最后一次文件节点编号被改变后至今的天数
-r,-w,-x这几个操作符测试的是有效用户或组的ID,看他们是否有相应的文件权限,所谓有效用户,指的是负责运行这个程序的人这些测试会查看文件的权限位,以此判断哪些操作时允许的。如果系统使用访问控制列表,那么这些测试将根据该列表进行判断,
Unix文件系统上有且仅有7种文件类型,分别由以下7种文件测试操作符代表。
-f,-d,-l,-S,-p,-b,-c 
测试同一文件的多项属性
如果要一次测试某个文件的若干属性,可以将各个文件测试组成一个逻辑表达式。比如想操作那些既可读又可写的文件,可以依次检查这两个属性并用and合并起来,
if(-r $file and -w $file)
但是这种方式非常消耗系统资源,因为Perl每次都在内部做了一次stat操作,拿到了文件的所有信息。
Perl有个特别的简写可以避免这种重复运动,它就是虚拟文件句柄_(下划线字符),它会告诉Perl用上次查询过的文件信息来做当前测试。Perl只需要查询一次文件信息就可
if(-r $file and -w_)
并非只能在一条语句中连续使用_,但是必须保证两次查询的是同一个文件
栈式文件测试操作符
从5.10开始允许我们使用栈式写法将文件测试操作符排成一排,放在要测试的文件名前
if(-w -r $file)
使用栈式写法时,靠近文件名的测试会先执行,次序为从右往左。 
stat和lstat函数
stat函数返回文件所有信息。stat函数的参数可以是文件句柄(包括虚拟文件句柄),或是某个会返回文件名的表达式。如果stat执行失败(通常是由于无效的文件名或是文件不存在),它会返回空列表。要不然返回一个含13个元素的数字列表。
$dev $ino $mode $nlink $uid $gid $rdev $size $atime $mtime $ctime $blksize $blocks
localtime函数
localtime函数在标量上下文中可以完成时间戳到时间的转换
在列表上下文中,localtime会返回一个数字元素组成的列表。
$sec, $min $hour $day $mon $year $wday $yday $isdst
按位运算操作符
按位操作运算符对数据进行二进制数学运算。
&按位与操作符会给出两边参数对应的位置中哪些位同时为1按位与操作符只有在两边相应的位均为1时才会产生1,
|按位或,在两边相应的位有一个为1则返回1
^按位异或,哪些位在任何一边为真则返回真,但不能两边都为真。
<< 按位左移将左边操作数向左移动数位,移动位数由右边操作数指定,并以0来填补最低有效位
>> 按位右移,将左边操作数向右移动位数,移动位数由右边操作数指定,并丢弃移出的最低有效位
~取按位取反,返回操作数逐位取反之后的数值
按位左移

TAG:

 

评分:0

我来说两句

Open Toolbar