2013-01-04 42 views
0

基本上,我試圖用今天的日期創建一個新目錄,然後創建一個新文件並將其保存在該文件夾中。創建一個新文件並保存在Perl中打開目錄

我可以得到所有步驟單獨工作,但該文件不希望被保存在目錄內。

mkdir($today); 
opendir(DIR, $today) or die "Error in opening dir $today\n"; 

    open SAVEPAGE, ">>", $savepage 
    or die "Unable to open $savepage for output - $!"; 
    print SAVEPAGE $data; 
    close(SAVEPAGE); 

closedir(DIR); 

我已經做了很多的搜索,試圖找到合適的例子,但不幸的是在查詢中的每一個字我試圖讓數以百萬計的點擊「打開/保存/文件:基本上我的工作/目錄「等我知道我可以更好地處理錯誤等,這將是下一步,一旦我的功能工作。任何指針將不勝感激,歡呼。

+2

你讓'opendir'與'chdir'混淆。前者「打開」該目錄,即讀取其包含的文件名。後者改變你的工作目錄,就像* nix和windows命令提示符下的命令'cd'。 – TLP

回答

5

只需使用目錄名稱打開文件前綴。無需執行opendir

mkdir($today); 
open SAVEPAGE, ">>", "$today/$savepage"; 
+0

它的工作,謝謝。 – Chris

+0

@ChrisKeep檢查答案被接受以幫助其他人:)。 –

+0

謝謝 - 已經完成。昨天找到答案太快了,可以將它標記爲同時接受:) – Chris

0

而不是使用完全合格的文件名的所有時間,你可能更喜歡你打開文件前使用chdir $today。這將更改當前工作目錄,並強制使用相對路徑或無路徑指定的文件相對於新目錄打開。

另外,使用autodie編譯指示可以避免檢查狀態open,close等;並且使用詞法文件句柄更可取,原因很多,包括文件句柄變量超出範圍時隱式關閉文件。

這就是你的代碼的外觀。

use strict; 
use warnings; 

use autodie; 

my $today = 'today'; 
my $savepage = 'savepage'; 
my $data = 'data'; 

mkdir $today unless -d $today; 
{ 
    chdir $today; 
    open my $fh, '>>', $savepage; 
    print $fh $data; 
} 

但是,如果在多個目錄中的文件程序的交易則是他們之間的尷尬chdir前後,和原來的目錄必須被明確地保存否則就會被人遺忘。在這種情況下,File::chdir模塊可能會有所幫助。它提供了$CWD程序包變量,如果其值發生更改,它將更改當前工作目錄。它也可以像其他任何可變的包一樣本地化,以便在本地化塊的末尾恢復原始值。

這裏是一個例子。

use strict; 
use warnings; 

use File::chdir; 
use autodie; 

my $today = 'today'; 
my $savepage = 'savepage'; 
my $data = 'data'; 

mkdir $today unless -d $today; 
{ 
    local $CWD = $today; # Change working directory to $today 

    open my $fh, '>>', $savepage; 
    print $fh $data; 
} 

# Working directory restored to its previous value 
+0

非常感謝您的詳細解答,我會在進一步開發我的腳本時留意它。 – Chris

相關問題