perl学习日记11文件检验

1.    文件检验

1.1      文件检测操作

die “Oops! A file called‘$filename’already exists./n”

if –e $filename; 文件已存在

 

warn “Config file is looking pretty old!/n”

if –M CONFIG > 28;  #配置文件如果在28天都没有做出修改

 

my@ariginal_files = qw/ fred barney betty Wilma pebbles dino bam-bamm/;

my @big_old_files; #要移到备份磁带上的文件

foreach my $filename (@original_files){

push @big_old_files, $filename

if –s $filename > 100_100 and –A $filename > 90;  #大小大于100K并且超过90天没有访问过

}

 

11-1 文件检测选项及其含义

检测选项含义

-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 索引节点修改时间(单位:天)

具体的东西可以用的比较少,真正要用的时候回来查就行了

1.2      stat lstat 函数

my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blockes)

= stat($filename);

就是返回文件更多的状态,具体状态也自己看吧,应该看得懂

Lstat当然就是当filenamelink的时候,返回它作为link的信息,因为如果用stat,返回的是它链接的文件的信息

1.3      localtime 函数

标量上下文中:返回:如The May 31 09:48:18 2007

my $timestamp = 1180630098;

my $date = localtime $timestamp;

列表上下文返回:

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

= localtime $timestamp;

1.4      位操作

c差不多

10 & 12 按位与;当操作数相应位均为时结果为(本例结果为8

10 | 12 按位或;当操作数中相应位有一个为则结果为1(本例结果为14

10 ^ 12 按位异或;当操作数中相应位有且仅有一个为1,结果才为1(本例结果6

6 << 2 位左移,将左边操作数左移右边操作数所指定的位数,被移出的位置(右边)0(结果为24

25 >> 2 位右移,将左边操作数右移动右边操作数所指定的位数,丢弃多余的位数(左边)(本例结果位6

~10 位取反,也叫做一元位补运算;其返回值为操作数中相应位取反的值(本例为0Xfffffff5,这和具体情况

有关)

1.4.1.使用位串

所有的位操作符都可以对位串和整数进行操作。如果操作数是整数,则结果为整数

~10 得到的是64 位的结果:0Xfffffffffffffffffff5,而非32 位的结果:0Xfffffff5。)

但如果位操作符的操作数为字符串,Perl 会将其作为位串进行处理。

“/xAA”| “/x55”得到的结果是“/xFF”

1.5      使用特殊的下划线文件句柄

my @original_files = qw/ fred barney bettyWilma pebbles dino bam-bamm/;

my @big_old_files; #需要移到备份磁带上去的文件

foreach(@orginal_files){

push @big_old_files, $_

if (-s) > 100_100 and –A _ > 90; #比以前的方法效率高

当对这个文件句柄(此操作数为单个下划线)进行文件检测(file test)stat,或lstat 操作时,将要求Perl 对前一个文件检测(file test), stat,lstat 函数的操作数进行操作,而非再一次的进行系统调用。

第一次检测时使用了默认的变量$_。这也更加有效率(可能除了对程序员之外),他从操作系统中得到数据。第二次检测使用了这个文件句柄。这次检测中,使用第一次检测的文件的大小信息,这是我们所需要的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值