2009-06-09 35 views
4

我有一个文件名列表。我必须为每个这些名称创建一个文件,将各行文件写入(不按特定顺序),然​​后关闭它们。如何写入我存储在数组中的Perl文件句柄?

我该如何在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 $_; 
} 

我怎么能这样做吗?

+0

我怀疑这会更好地完成对文件句柄的引用......但我不太喜欢perl中的文件句柄。 – 2009-06-09 03:54:50

回答

2

这是我会怎么做(未经测试,但我敢肯定这是件好事):

use IO::File; 

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

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

这是OO,它有一个简洁的界面,你并不需要担心关闭他们,因为它会在阵列超出范围时死亡。

+0

死?也许你的意思是“这样做”。但问题中的例子也是这样做的;与IO :: File无关。 – ysth 2009-06-09 04:09:26

13

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

print { $handles[0] } ... 

这在perldoc -f print解释。 同样的限制一般适用于indirect object syntax,以及用于确定何时<>是readline操作,而不是glob操作。

相关问题