2016-08-24 15 views
0

動的ファイルハンドルを使用して複数のファイルを開こうとしていますが、動作しません。動的ファイルハンドルを使用して複数のファイルを動的に開く方法

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" 

このエラーを示して?

+0

の可能性のある重複した[どのように私はPerlで変数名として変数を使用することができますか?](http://stackoverflow.com/questions/1549685/how-can-i-use-a-variable-as -a-variable-name-in-perl) –

+0

これは間違いなく '1 .. $#genome_list'ですか?' @ genome_list'はおそらく '0'で始まるからです... – Sobrique

答えて

3

あなたはlittle bit nastyの何かをしようとしています。それを行う方法を教えてくれるのではなく、私は代替案を提案します。

あなたが一度開いて複数のファイルハンドルが必要な場合は、何が必要ハッシュです:

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 $!; 
} 
+3

これは配列としてはうまくいかないでしょうか?キーは整数の連続した範囲ですか? – Borodin

+0

おそらく、そうです。私はそれが数字になっているにもかかわらず、キーとして使用しようとしている '文字列'であると考えていました。 – Sobrique

関連する問題