2011-04-08 96 views
1

$File::Find是遍歷目錄樹的強大方法。Perl File :: Find Undocumented Globals

我碰到需要確定(在wanted函數內)遞歸搜索開始的頂層目錄。 This perldoc提到$File::Find::topdir這似乎包含我所需要的。所以,我現在寫的這個腳本現在可以工作。

不過,我很好奇,是有更多關於這方面的文件和其他全局在同一段落中提到:

$File::Find::topdir 
$File::Find::topdev 
$File::Find::topino 
$File::Find::topmode 
$File::Find::topnlink 
$File::Find::fullname 
$File::Find::prune 

或者,可能你們對這些全局的評論,如果你已經在使用它你自己的腳本寫作企業。

+0

我經常使用全名(當收集dirnames /文件名以在find()調用之外使用時)。我有時使用修剪。我不認爲我曾經使用過別人。 – runrig 2011-04-08 14:18:44

回答

1

如果沒有記錄全局變量,它們不適合公開使用,您最好不要使用它。

top *變量似乎是文件的一些常用元數據,如stats()系統調用返回的那樣。 (設備,inode,模式(即訪問權限),鏈接數)

+0

嗯,他們有點文件記錄,因爲@Lex鏈接到官方的perl文檔。他們只是記錄不佳。 – dsolimano 2011-04-08 13:41:31

+0

@dsolimano - 同意。在非unix(文件)系統上,其中一些系統也將具有無意義或默認值,例如發生在FAT32中的頂級目錄的0777,或者我認爲。 – Ingo 2011-04-08 13:49:17

+0

@dsolimano - 也同意。我不完全是一個Perl黑客。我發現這些的原因是因爲他們在官方的perl文檔中。但是,文檔確實意味着你可能不應該直接使用它們。這只是暗示,並沒有明確說明。 – 2011-04-09 20:21:20

0

$ File :: Find :: prune被記錄下來,並且非常有用。這就像-prune Unix的的選項找到命令,一個設置它說「不下到這個目錄」。

文件::查找的POD還介紹全稱相當好:

  • 當 「跟隨」 或 「follow_fast」 已生效,也有$File::Find::fullname。 ....有一個變量$File::Find::fullname,它保存解析了所有符號鏈接的文件的絕對路徑名。如果鏈接是懸掛的符號鏈接,則全名將被設置爲「undef」。

至於其他 - 早在90年代初,Perl5中以其方便詞法變量,對象和瓶蓋一起來到之前(和之前CPAN),Perl的附帶文件::查找的前身「find.pl 「 - 因此File :: Find的所有包變量仍然使用。由於某些原因,「最高」變量留在那個記錄不完善的狀態。

當調用find(\&wanted, @directories_to_search),模塊設置$File::Find::topdir@directories_to_search每個目錄,因爲它經過他們。其他top *變量與該「頂級」目錄的屬性相關。