我有一个文件名列表.我必须为每个名称创建一个文件,写入各种文件的行(没有特定的顺序),然后关闭它们.
我怎么能在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 $_;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
yst*_*sth 14
printfilehandle 参数必须是一个单词,一个简单的标量或一个块.所以:
print { $handles[0] } ...
Run Code Online (Sandbox Code Playgroud)
这在perldoc -f print中有解释.同样的限制通常适用于间接对象语法,以及确定何时<>是readline操作,而不是glob操作.
这是我的做法(未经测试,但我很确定它很好):
use IO::File;
# ...
my @handles = map { IO::File->new($_, 'w') } @names;
$handles[2]->print("wassup");
# ...
Run Code Online (Sandbox Code Playgroud)
它是面向对象的,它有一个更干净的界面,你不需要担心关闭它们,因为当数组超出范围时它就会死掉。