如何使用变量而不是文件句柄

Leo*_*ANG 2 perl

我有一个大的数据文件dump.all.lammpstrj,我需要拆分/归类到一系列文件,如Z_1_filename,Z_2_filename,Z_3_filename等基于每个记录的坐标.

坐标以无序方式保存,因此我的程序读取每一行并确定应将此记录发送到哪个文件.

我用变量, $filehandle = "Z_$i_DUMP"

我希望打开所有可能的文件

for ( my $i = 1; $i <= 100; $i++ ) {
  $filehandle = "Z_$i_DUMP";
  open $filehandle,'>', "Z_$i_dump.all.lammpstrj.dat";
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是在运行我的程序时,我收到了一条消息

不能使用字符串("Z_90_DUMP")作为符号引用,而"严格引用"在...中使用

我不想扫描每个输出文件的所有数据,因为dump.all.lammpstrj扫描需要很长时间.

有没有办法将定义的变量用作文件句柄?

Kje*_* S. 5

为了让您了解如何做到这一点.将文件句柄放在哈希(或者数组中,如果用数字索引).

use strict;
use warnings;
my %fh;                                                        #file handles
open $fh{$_}, '>', "Z_${_}_dump.all.lammpstrj.dat" for 1..100; #open 100 files
for(1..10000){                                    #write 10000 lines in 100 files
    my $random=int(1+rand(100));                  #pick random file handle
    print {$fh{$random}} "something $_\n";
}
close $fh{$_} for 1..100;
Run Code Online (Sandbox Code Playgroud)