-r:文件或目錄對此(有效的)用戶(effective user)或組是可讀的
-w:文件或目錄對此(有效的)用戶或組是可寫的
-x:文件或目錄對此(有效的)用戶或組是可執(zhí)行的
-o:文件或目錄由本(有效的)用戶所有
-R:文件或目錄對此用戶(real user)或組是可讀的
-W:文件或目錄對此用戶或組是可寫的
-X:文件或目錄對此用戶或組是可執(zhí)行的
-O:文件或目錄由本用戶所有
-e:文件或目錄名存在
-z:文件存在,大小為0(目錄恒為false)
-s:文件或目錄存在,大小大于0(值為文件的大小,單位:字節(jié))
-f:為普通文本
-d:為目錄
-l:為符號鏈接
-S:為socket-p 為管道(Entry is a named pipe(a“fifo”))
-b:為block-special 文件(如掛載磁盤)
-c:為character-special 文件(如I/O 設(shè)備)
-u:setuid 的文件或目錄
-g:setgid 的文件或目錄
-k:File or directory has the sticky bit set
-t:文件句柄為TTY(系統(tǒng)函數(shù)isatty()的返回結(jié)果;不能對文件名使用這個測試)
-T:文件有些像“文本”文件
-B:文件有些像“二進制”文件
-M:修改的時間(單位:天)
-A:訪問的時間(單位:天)
-C:索引節(jié)點修改時間(單位:天)
測試同一個文件的多項屬性
if(-r $file and -w _) # 虛擬文件句柄 _
{...}
棧式文件操作符
use 5.010;
if( -r -w -x -o -d $file){
print "My directory is readable,writable,and executable!\n";
}
對于返回真假值以外的測試來說,棧式的寫法并不出色。像下面的例子,我們原本是想操作某個512字節(jié)的目錄,可實際上會出問題:
use 5.010;
if (-s -d $file <512){
say ‘The directory is less than 512 bytes’;
}
如果按照其內(nèi)部的現(xiàn)實方式展開,我們可以看到上面的例子實際上相當(dāng)于如下的寫法,整個合并起來的文件測試表達成了比較運算的一個操作數(shù):
if ((-d $file and -s _)<512){
print “The directory is less than 512 bytes!\n”;
}
當(dāng)-d返回為假時,Perl將假值同數(shù)字512作比較。比較的結(jié)果就變?yōu)檎?,因為假等效為?shù)字0,而0永遠小于512。為了避免出現(xiàn)著這種錯誤,我們還是分開來寫比驕傲好。
if (-d $file and -s _ <512){
print “The directory is less than 512 bytes!\n”;
}