
文件测试
|
227
但如果省略参数,请特别小心,任何接在文件测试操作符之后的,就算看起来不像,
也会被当作要测试的目标。比方说,你想知道以千字节为单位(而不是以字节为单
位)的文件大小,那么你可能会直接把
-s
测试的结果除以
1000
(或是
1024
),像这
样:
#
文件名保存在
$_
my $size_in_K = -s / 1000; #
糟糕!
当
Perl
的语法解析器看到斜线时,不会认为那是一个除法操作符。因为它在看
到
-s
操作符后,就要尝试寻找它的可选操作数,也就是要测试的文件,现在它看到
的是一个以斜线开头的,像是某个正则表达式,但却找不到结尾,于是报错。要避免
这种问题,可在文件测试操作符的两边加上括号:
my $size_in_k = (-s) / 1024; #
默认用
$_
测试
当然,明确写上要测试的文件总是安全稳妥的做法:
my $size_in_k = (-s $filename) / 1024;
同一文件的多项属性测试
如果要一次测试某个文件的若干属性,可以将各个文件测试组成一个逻辑表达式。比
如我们只想操作那些既可读又可写的文件,可以依此检查这两个属性并用
and
合并起
来:
if (-r $filename and -w $filename) {
... }
这可是个非常耗费资源的操作,每次进行文件测试时,
Perl
都得从文件系统中取出
所有相关信息(实际上,每次
Perl
都在内部做了一次
stat
操作,下节我们就会介
绍)。虽然在做
-r
测试的时候,我们已经拿到了所有相关信息,可到了做 ...