2012-06-03 10 views
5

インデックスに応じてどのファイルにどのデータを入れるかを選択したかったのですが、しかし、私は次のことに固執しているようです。ファイルハンドルの配列

私は、ファイルハンドルの配列を使用してファイルを作成しました:

my @file_h; 
my $file; 
foreach $file (0..11) 
{ 
    $file_h[$file]= new IT::File ">seq.$file.fastq"; 
} 

$file= index; 
print $file_h[$file] "$record_r1[0]$record_r1[1]$record_r1[2]$record_r1[3]\n"; 

しかし、私は最後の行でいくつかの理由でエラーが発生します。誰か助けて....?

+0

これは、ファイルハンドルがもともと偶数変数ではなく、はるかに複雑な左辺値であったため、Perlの構文が奇妙です。 –

+0

エラーは何ですか?また、完全に自己完結した例を考案できますか? (それは、すぐにIT :: File [sic]を意味しますか? 'index()'または '$ index'を意味しますか?) – pilcrow

答えて

1

は、第1の一時変数に$file_h[$file]を代入してみてください。

my @file_h; 
my $file; 
my $current_file; 

foreach $file (0..11) 
{ 
    $file_h[$file]= new IT::File ">seq.$file.fastq"; 
} 

$file= index; 
$current_file = $file_h[$file]; 

print $current_file "$record_r1[0]$record_r1[1]$record_r1[2]$record_r1[3]\n"; 

私が覚えている限りでは、Perlは無効な構文不満、それ以外の場合は出力ハンドルとしてそれを認識しません。

4

あなたは常にオブジェクト指向構文を使用することができます。

$file_h[$file]->print("$record_r1[0]$record_r1[1]$record_r1[2]$record_r1[3]\n"); 

また、あなたはもっと単純に配列をプリントアウトすることができます。

$file_h[$file]->print(@record_r1[0..3],"\n"); 

またはこのように、これら4つの要素が実際にある場合全部:

$file_h[$file]->print("@record_r1\n"); 
17

単純にする必要があります:

my @file_h; 
for my $file (0..11) { 
    open($file_h[$file], ">", "seq.$file.fastq") 
     || die "cannot open seq.$file.fastq: $!"; 
} 

# then later load up $some_index and then print 
print { $file_h[$some_index] } @record_r1[0..3], "\n"; 
+0

ああ...ブラケットのthingy、ありがとう –

+0

興味深いことに、 $ file_h [$ some_index]、LOCK_EX'は角括弧なしで動作します。なぜ誰が知っていますか?まさにperlのファイルハンドルとは何ですか? – soger

関連する問題