文件测试操作符:
-e:判断文件是否存在
在创建新文件程序之前,应先检查指定的文件是否已经存在,以免意外覆盖重要的电子表格或是宝贵的生日档案。要达到此目的,我们可以用-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;
CONFIG:为文件句柄,来检查CONFIG 28内是否改变过
-s:查找硬盘中的文件的大小
my @original_files = qw /fred barney betty wilma pebbles dino bamm-bamm /;
my @big_old_files; #将要移到备份磁带上的既大且旧的文件列表
foreach my $filename (@original_files)
{
push @big_old_files, $filename
if -s $filename > 100_000 and -A $filename > 90;
}
文件测试操作符 意义
-r 文件或目录,对目前(有效的)用户或组来说是可读的
-w 文件或目录,对目前(有效的)用户或组来说是可写的
-x 文件或目录,对目前(有效的)用户或组来说是可执行的
-o 文件或目录,由目前(有效的)用户拥有
-R 文件或目录,对实际的用户或组来说是可读的
-W 文件或目录,对实际的用户或组来说是可写的
-X 文件或目录,对实际的用户或组来说是可执行的
-O 文件或目录,由实际的用户拥有
-e 文件或目录是存在的
-z 文件存在且没有美容(对目录来说永远为假)
-s 文件或目录存在而且有内容(返回值是以字节为单位的文件的大小)
-f 是普通文件
-d 是目录
-l 是符号链接
-S 是socket类型的文件
-p 是命名管道,也就是先入先出队列
-b 是块设备(比如默哥可挂载的磁盘)
-c 是字符设备文件(比如某个IO设备)
-u 文件或目录设置了setuid位
-g 文件或目录设置了setgid位
-k 文件或目录设置了sticky位
-t 文件句柄是tty设备,(类似系统函数isatty()的测试,不能对文件名进行此测试)
-T 看起来像文本文件
-B 看起来像二进制文件
-M 最后一次被修改后至今的天数
-A 最后一次被访问后至今的天数
-C 最后一次文件节点编号(inode)被变更后至今的天数
上面的所谓的有效用户,指的是"负责"运行这个程序的人
my $size_in_k = (-s) / 1024; #获取文件是kb大小
测试同一文件的多项属性:
可读又可写
if(-r $file and -w $file)
{ ... }
虚拟文件句柄_(下划线)
if(-r $file and -w _)
{ ... }
if(-r $file)
{ print "The file is readable\n"; }
if(-w _)
{ print "The file is wirtable\n"; }
栈式文件测试操作符:
if(-w -r $file)
{ print "The file is both readable and writeable!\n"; }
use 5.010;
if(-r -w -x -o -d $file)
{ print "My directory is readable, writeable, and executable!\n"; }
if(-d $file and -s _ < 512)
{ print "The directory is less than 512 bytes!\n" }
stat和lstat函数:
my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blockzies, $blocks) = stat($fileName);
$dev, $ino
即文件所在的设备与文件的inode编号,这个编号决定了这个文件的唯一性,会想发给文件的编号,即使他有多个不同的文件名(使用应链接!\n)
$mode:
文件的权限集合
$nlink:
文件或目录的硬链接数,也就是这个条目有多少个真实名称
$uid和$gid
以数值形式表示文件拥有者的用户ID及组ID
$size:
以字节为单位文件大小,和-s文件操作符的返回值相同
$atime,$mtime,$ctime:
三种时间戳,但在这里是以系统的时间格式来表示
localtime函数:
my $timestamp = 118060098;
my $date = localtime $timestamp;
在列表上下文中,localtime会返回一个数字元素组成的列表,但其中有些元素不是你想要的:
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $yday, $listdst)
= localtime $timestamp;
简单测试:
#!/usr/bin/perl -w
use strict;
my $filename = "./file1";
die "Oops ! A file called $filename already exists.\n"
if -e $filename;