我对perl很新,并有一个问题。我正在尝试在目录中创建文件并写入这些文件。这是我到目前为止,它创建了目录,但没有在其中写任何东西。我无法弄清楚如何写入文件,我已经看过创建一个tee或多维数组,但这不起作用。
#!/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);
}
答案 0 :(得分:2)
以下创建28个文件,并将文件名的大写写入文件。例如,它会创建一个名为aa
的文件,其中包含一行:AA
。
use warnings;
use strict;
use File::Slurp;
for ('aa' .. 'bb') {
write_file($_, uc $_);
}
请参阅File::Slurp。
答案 1 :(得分:1)
简而言之,要将某些内容写入使用DFILE句柄打开的文件,您应该使用
print DFILE 'something to print';
但是我对你的目标感到困惑,特别是关于你究竟要写这些文件的内容。你能澄清一下吗?
答案 2 :(得分:0)
您正在打开要写入的文件(>
),并增强阅读文件(+
)。打开文件后,您将从其文件句柄中读取并将您读取的内容打印到默认文件句柄(STDOUT
)。完成后,关闭文件。
如果该文件尚不存在,您将创建该文件,将无法读取任何内容(并且无需打印),并且您将关闭仍为空的文件。
我不知道你要做什么。如果您尝试向文件添加行,则可以将其打开以进行追加(>>
)。当您想要打印到该文件句柄时,您必须告诉print
您要使用哪个文件句柄:
#!/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
如果您尝试同时打印到文件和标准输出(因为您提到了tee),您可以创建一个多路复用到一个或多个其他文件句柄的文件句柄。 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;
}
现在每个输出行都会转到两个地方:屏幕和文件。