文件測試操作符

-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”;
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容