2011-12-12 59 views
9

我真的應該知道這一點,但我主要使用Linux,Mac OS X和Windows,它們都使用正斜槓(/)作爲目錄分隔符(Windows可以使用\/)。 。Perl處理目錄分隔符

這意味着,當我通常寫Perl程序,我可以簡單地使用/作爲目錄分隔符,一切都很好。但是,我知道,File::Spec是假設允許文件分隔符的便攜(意義)。

如果我不使用正斜槓作爲目錄分隔符的系統上,我明白,用戶希望能夠使用默認的分隔符輸入文件,看看輸出,默認的分隔符。 (例如,Windows用戶將輸入並期望輸出爲C:\Users\smith\Documents而不是C:/Users/smith/Documents),但Perl在內部執行什麼操作?

我可以,儘管什麼平臺可以作爲目錄分隔符使用,只需使用前,當我處理文件的內部斜槓。例如,我有一個目錄$dir和一個名爲$file的文件,我想打開該文件。我可以簡單地說$dir/file,還是必須使用File::Spec來爲我的名字連接名稱?

事實上,Perl程序需要在目錄名稱中正斜槓?我正在編寫一個模塊,並將向調用程序傳送文件名。我是否應該將文件作爲/foo/bar/fubar或者如果系統使用早期Macintosh OS等冒號,例如:foo:bar:fubar

+3

你打算與路徑來幹什麼?如果是讀取和寫入文件,那麼'/'很好,而且perl會做你的意思。如果您正在構建要由主機計算機的命令shell或該系統上的其他程序解析的命令,那麼您需要遵守該平臺的規則,並且File :: Spec可以提供幫助。 –

回答

7

perlport說,幾乎所有有說這個問題。這就是說,系統不能接受/作爲路徑分隔符是罕見的,你可能不會有那麼多從使用File::Spec忠實到處獲得。但也要小心區分目錄分隔符的內部和外部用途。例如,這將在Windows上運行:

open my $fh, '<', 'C:/some/directory/to/some/file'; 

但是這可能不是,因爲它需要Windows外殼程序進行處理:

system("C:/some/program.exe C:/some/program/argument.txt"); 
+0

感謝您使用Perlport的鏈接。我確實學到了一些關於'unlink'和VMS的東西,這很有趣。我的程序正在將文件/目錄名稱返回給調用程序,所以我不太擔心外部名稱,但我可能會添加該選項。 –