6

インデックスに応じて、どのデータをどのファイルに入れるかを選択したかったのです。しかし、私は次のことで立ち往生しているようです。

ファイル ハンドルの配列を使用してファイルを作成しました。

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";

しかし、最後の行でなぜかエラーが発生します。誰か助けて……?

4

3 に答える 3

19

それは単純に次のようになります。

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";
于 2012-06-03T04:47:14.710 に答える
5

オブジェクト指向の構文はいつでも使用できます。

$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");
于 2012-06-03T02:17:53.930 に答える
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 はそれを出力ハンドルとして認識せず、無効な構文について文句を言います。

于 2012-06-03T01:47:35.543 に答える