書き込み用ファイル(>
)を開き、読み取り用にファイルを拡張しています(+
)。ファイルを開いた後、そのファイルハンドルから読み込んだ内容をデフォルトのファイルハンドル(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;
}
今、各出力ラインは二つの場所に行きます。
なぜ()で読んで同じ行を書いていますか?あなたの目標は何ですか? –
perreal