创建文件aa..zz并使用范围运算符将AA..ZZ写入文件

时间:2012-02-24 00:59:53

标签: perl

我对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);
}

3 个答案:

答案 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;
    }

现在每个输出行都会转到两个地方:屏幕和文件。