【问题标题】:How can I generate several Perl filehandles programmatically?如何以编程方式生成多个 Perl 文件句柄?
【发布时间】:2010-01-10 17:13:23
【问题描述】:

Perl 中有没有办法以编程方式生成文件句柄?

我想同时打开十个文件并使用由 (CONST NAME + NUMBER) 组成的文件句柄写入它们。例如:

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

【问题讨论】:

  • 不可以将文件句柄存储在数组中吗?
  • Intermediate Perl 中有一整章是关于这样做的。 :)

标签: perl filehandle


【解决方案1】:

您可以将文件句柄直接粘贴到未初始化的数组槽中。

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

【讨论】:

    【解决方案2】:

    加上一点IO::Filemap 你也可以这样做:

    use IO::File;
    
    my @files = map { IO::File->new( "file$_", 'w' ) } 0..9;
    
    $files[2]->print( "writing to third file (file2)\n" );
    

    【讨论】:

      【解决方案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,但它们是一种讨厌的方法,而且我从未见过使用数组或哈希不是更好的选择。

      【讨论】:

      • 但是如果我想写入第五个文件,例如我是怎么做的,你的意思是 push @list_of_file_handles, $fh; ?谢谢
      • 打印 {$list_of_file_handles[4]} $data;
      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2018-01-29
      • 2014-08-10
      • 1970-01-01
      • 2015-08-15
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多