如何写入存储在数组中的Perl文件句柄?

时间:2009-06-09 03:42:08

标签: perl filehandle

我有一个文件名列表。我必须为每个名称创建一个文件,写入各种文件的行(没有特定的顺序),然​​后关闭它们。

我怎样才能在perl中这样做?我设想类似下面的代码(它不会以那种形式工作并给出语法错误):

my @names = qw(foo.txt bar.txt baz.txt);
my @handles;

foreach(@names){
  my $handle;
  open($handle, $_);
  push @handles, $handle; 
}

# according to input etc.:
print $handles[2] "wassup";
print $handles[0] "hello";
print $handles[1] "world";
print $handles[0] "...";

foreach(@handles){
  close $_;
}

我该怎么做?

2 个答案:

答案 0 :(得分:14)

print的文件句柄参数必须是一个单词,一个简单的标量或一个块。 所以:

print { $handles[0] } ...

perldoc -f print中对此进行了解释。 同样的限制通常适用于indirect object syntax,以及确定何时<>是一个readline操作,而不是一个glob操作。

答案 1 :(得分:3)

这是我将如何做到的(未经测试,但我很确定这是好的):

use IO::File;

# ...
my @handles = map { IO::File->new($_, 'w') } @names;

$handles[2]->print("wassup");
# ...

它是OO,它有一个更干净的界面,你不必担心关闭它们,因为它会在阵列超出范围时死亡。