2012-02-24 10 views
0

私はperlにはとても新しく、質問があります。私は、ディレクトリにファイルを作成し、それらのファイルに書き込もうとしています。ここに私がこれまで持っていたのは、ディレクトリを作成するが、何も書き込まない。私はファイルに書き込む方法を理解できません、私はティーまたは多次元配列を作成してみましたが、うまくいきませんでした。要するにファイルaa..zzを作成し、範囲演算子を使用してファイルにAA..ZZを書き込む

#!/usr/bin/perl 
use strict; 
use warnings; 

my @alpha = ("aa".."bb"); 


for my $combo(@alpha) 
{ 
open(DFILE,"+>$combo") || die "die open failed"; 

while (<DFILE>) 
{ 
    print $_; 
} 
close(DFILE); 
} 
+3

なぜ()で読んで同じ行を書いていますか?あなたの目標は何ですか? – perreal

答えて

1

、DFILEハンドルで開かれたファイルに何かを書くために、あなたは

print DFILE 'something to print'; 

使用する必要がありますしかし、私は特に、あなたが行っている正確に何について、少しあなたの目標について困惑していますこれらのファイルに書き込む。あなたはそれを明確にすることができますか?

2

次の例では、28個のファイルが作成され、ファイル名の大文字がファイルに書き込まれます。たとえば、aaという名前のファイルを作成します。このファイルには、1行:AAが含まれています。

use warnings; 
use strict; 
use File::Slurp; 

for ('aa' .. 'bb') { 
    write_file($_, uc $_); 
} 

File::Slurpを参照してください。

0

書き込み用ファイル(>)を開き、読み取り用にファイルを拡張しています(+)。ファイルを開いた後、そのファイルハンドルから読み込んだ内容をデフォルトのファイルハンドル(STDOUT)に出力します。完了したら、ファイルを閉じます。

ファイルがまだ存在しない場合は、ファイルを作成します。何も読み取られず(印刷も何も行われません)、空のファイルは閉じます。

私はあなたが何をしようとしているのか分かりません。ファイルに行を追加しようとしている場合は、代わりに行を追加して開くことができます(>>)。

#!/usr/bin/perl 
use strict; 
use warnings; 

my @alpha = ("aa".."ab"); 

for my $combo (@alpha) { 
    open my $fh, ">>", $combo or die "die open failed: $!"; 

    printf $fh "[%s] Here's a new line in $combo\n", scalar localtime; 
    } 

これは、のような出力とファイルを生成します:あなたがしようとしている場合は

[Fri Feb 24 09:07:17 2012] Here's a new line in aa 
[Fri Feb 24 09:08:52 2012] Here's a new line in aa 

あなたがそのファイルハンドルに印刷したい場合は、あなたが使用したいファイルハンドルprintを伝える必要がありますファイルに出力し、同時に標準出力に出力する(あなたがTに言及しているので)、1つ以上の他のファイルハンドルに多重化するファイルハンドルを作成することができます。 IO::Teeはあなたのためにそれを行うことができます:画面およびファイル:

#!/usr/bin/perl 
use strict; 
use warnings; 

use IO::Tee; # get from CPAN 

my @alpha = ("aa".."ab"); 

for my $combo (@alpha) { 
    open my $fh, ">>", $combo or die "die open failed: $!"; 
    my $tee = IO::Tee->new($fh, \*STDOUT); 
    printf $tee "[%s] Here's a new line in $combo\n", scalar localtime; 
    } 

今、各出力ラインは二つの場所に行きます。

関連する問題