
文件测试
|
229
使用栈式写法时,靠近文件名的测试会先执行,次序为从右往左。不过通常测试次序
不是很重要。
对于复杂情况来说,这种栈式文件测试特别好用。比如我们想要列出可读、可写、可
执行并隶属于当前用户的所有目录,只需要按恰当的顺序摆上这些测试操作符:
use v5.10;
if (-r -w -x -o -d $filename) {
print "My directory is readable, writable, and executable!\n";
}
对于返回真或假值以外的文件测试来说,栈式写法并不出色。像下面的例子,我们原
本想要确认某个小于
512
字节的目录,可实际上会出问题:
use v5.10;
if (-s -d $filename < 512) { #
错啦!千万不要这么做
say 'The directory is less than 512 bytes!';
}
按其内部的实现方式展开,我们可以看到上面的例子实际上相当于如下的写法,整个
合并起来的文件测试表达式成了比较运算的一个操作数:
if (( -d $filename and -s _ ) < 512) {
print "The directory is less than 512 bytes!\n";
}
当
-d
返回假时,
Perl
将假值同数字
512
作比较。比较的结果就变为真,因为假等效
为数字
0
,而
0
永远小于
512
。为了避免这种令人困惑的写法,还是用分开的方式写
比较好,这对将来维护程序的人来说也更友善: ...