fileno FILEHANDLE
fileno DIRHANDLE

傳回檔案或目錄句柄的檔案描述符,如果檔案句柄未開啟,則傳回未定義。如果作業系統層級沒有真正的檔案描述符,例如使用 open 的第三個參數為記憶體物件的參考,則會傳回 -1。

這主要用於建構 select 和低階 POSIX tty 處理作業的位元圖。如果 FILEHANDLE 是表達式,則會將值視為間接檔案句柄,通常是其名稱。

您可以使用這個來找出兩個句柄是否參照相同的底層描述符

if (fileno($this) != -1 && fileno($this) == fileno($that)) {
    print "\$this and \$that are dups\n";
} elsif (fileno($this) != -1 && fileno($that) != -1) {
    print "\$this and \$that have different " .
        "underlying file descriptors\n";
} else {
    print "At least one of \$this and \$that does " .
        "not have a real file descriptor\n";
}

fileno 在目錄句柄上的行為取決於作業系統。在具有 dirfd(3) 或類似功能的系統上,fileno 在目錄句柄上會傳回與句柄關聯的底層檔案描述符;在沒有此類支援的系統上,它會傳回未定義的值,並設定 $!(errno)。