2010-01-10 99 views
3

在Perl中有沒有任何方式來編程生成文件句柄?如何以編程方式生成多個Perl文件句柄?

我想同時打開10個文件,並使用由(CONST NAME + NUMBER)組成的文件句柄向他們寫入。例如:

print const_name4 "data.."; #Then print the datat to file #4 
+2

是不是可以將文件句柄存儲在數組中? – adamse 2010-01-10 17:15:23

+1

有關完成此操作的完整章節,請參閱_Intermediate Perl_。 :) – 2010-01-10 23:17:05

回答

9

您可以將文件句柄直接粘貼到未初始化的陣列插槽中。

my @handles; 
for my $number (0 .. 9) { 
    open $handles[$number], '>', "data$number"; 
} 

不要忘了打印到陣列中的一個手柄的語法稍有不同:

print $handles[3] $data; # syntax error 
print {$handles[3]} $data; # you need braces like this 
3

這些日子裏,你可以指定文件句柄的標量(而不是使用表達式(如你的例子一樣)),所以你可以創建一個數組,並與填充它。

my @list_of_file_handles; 
foreach my $filename (1..10) { 
    open my $fh, '>', '/path/to/' . $filename; 
    push $list_of_file_handles, $fh; 
} 

你可以,當然,使用variable variables代替,但他們是一個討厭的方法,並使用一個數組或哈希不是一個更好的選擇時,我從來沒有見過一個時間。

+0

但是,如果我想寫第五個文件,例如我怎麼做 也意味着推@list_of_file_handles,$ fh; ? 謝謝 – dan 2010-01-10 17:29:30

+0

print {$ list_of_file_handles [4]} $ data; – Quentin 2010-01-10 17:31:19

5

帶着幾分IO::Filemap你也可以這樣做:

use IO::File; 

my @files = map { IO::File->new("file$_", 'w') } 0..9; 

$files[2]->print("writing to third file (file2)\n"); 
相關問題