繁体   English   中英

如何使用动态文件句柄动态打开多个文件

[英]How to open the multiple files dynamically using a dynamic file handle

我正在尝试使用动态文件句柄打开多个文件,但是它不起作用。

for my $i ( 1 .. $#genome_list ) {
    my $fh = "RESULT$i";
    open my $fh, "<", "filename$i"; # here is the problem
}

然后如何访问给定处理程序的数据。

当我运行程序时,它显示此错误

Can't use string ("RESULT1") as a symbol ref while "strict refs" 

我该如何解决?

您正在尝试做一些令人讨厌的事情 ,而不是告诉您如何做,我将建议一种替代方法。

如果需要一次打开多个文件句柄,则需要一个哈希值

my %file_handle_for;
for my $i ( 1..$#genome_list ) { 
    open ( $file_handle_for{$i}, '<', "filename$i" ) or die $!;
}

然后,您可以按以下方式访问文件:

print {$file_handle_for{$i}} "Some text\n"; 

要么:

while ( <{$file_handle_for{$i}}> ) {
    print;
 }

等等

当然,这是假设,您需要同时打开所有文件,而您可能并不需要打开这些文件。

上面是要使用变量作为变量名称的一般解决方案。

不过,以您的情况来看-您将以数字顺序打开文件而没有任何间隙,这意味着数组更适合。

my @filehandle_for; 
#note though - arrays start at zero normally, so you might be missing one here!
foreach my $number ( 1..$#genome_list ) { 
  open ( $filehandle_for[$number], '<', "filename$number" ) or die $!;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM