2011-05-21 80 views
3

我是新來的Perl和試圖編寫文本文件。我可以寫文本文件到一個現有的目錄沒有問題,但最終我想能夠創建我自己的目錄。如何在Perl中創建一個目錄?

我打算從我的課程作品網站上下載文件,我想將這些文件放在課程後命名的文件夾中。我不希望事先手動爲每個課程創建一個文件夾,而且我也希望最終與其他人共享該腳本,所以我需要一種方法來創建目錄並根據HTML中的課程名稱命名它們。

到目前爲止,我已經能夠得到這個工作:

use strict; 
my $content = "Hello world"; 
open MYFILE, ">C:/PerlFiles/test.txt"; 
print MYFILE $content; 
close (MYFILE); 

test.txt不存在,但不C:/PerlFiles/,也應該鍵入>允許我創建的文件,極大的。

以下,但不工作:

use strict; 
my $content = "area = pi*r^2"; 
open MYFILE, ">C:/PerlFiles/math_class/circle.txt"; 
print MYFILE $content; 
close (MYFILE); 

目錄C:/PerlFiles/math_class/不存在。

我也試過sysopen但增加的標誌時,我得到一個錯誤:

use strict; 
my $content = "area = pi*r^2"; 
sysopen (MYFILE, ">C:/PerlFiles/math_class/circle.txt", O_CREAT); 
print MYFILE $content; 
close (MYFILE); 

我從Perl Cookbook7.1這個想法。打開文件。它不起作用,並且我收到錯誤消息Bareword "O_CREAT" not allowed while "strict subs" in use。那麼這本書又是從1998年開始的,所以O_CREAT也許已經過時了。在某些時候,我認爲我需要將麪糰叉到最新的版本。

但仍然,我在這裏想念什麼?還是在創建文件之前手動創建目錄?

+1

'O_CREAT'未過時的,它是由提供的符號的[FCNTL](http://p3rl.org/Fcntl)模塊。你需要這樣導入它:'使用Fcntl qw(O_CREAT);' - 在你的其他'use'語句附近添加該行。 – daxim 2011-05-21 12:44:07

回答

7

使用File::Path來創建任意深度的路徑。使用dirname找出文件的包含目錄。

此外,使用詞彙文件句柄和三個參數的開放:

open(my $fd, ">", $name) or die "Can't open $name: $!"; 
+0

謝謝。我不知道這個open參數是什麼,但是當我最終給它們賦予變量名稱時,它會派上用場,而變量文件句柄無疑也會有所幫助。我還沒有真正通過基礎測試。 – msikd65 2011-05-21 11:22:29

+2

@ msikd65:它們通常被稱爲*詞法*文件句柄。確實很不錯。 – Dallaylaen 2011-05-21 11:57:25

+3

有一組標準的'File :: *'模塊與Perl一起安裝。請參閱'perldoc perlmodlib'獲取完整列表。 – shawnhcorey 2011-05-21 12:32:36

8

對,必須手動創建目錄。 使用mkdir函數。

您可以使用-d $dir(請參閱perldoc -f -X)檢查目錄是否已存在。

+0

夠簡單。感謝您的快速回答 – msikd65 2011-05-21 11:10:55