Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 文件句柄数组_Perl - Fatal编程技术网

Perl 文件句柄数组

Perl 文件句柄数组,perl,Perl,我想根据索引选择要放入哪个文件的数据。然而,我似乎被以下几点困住了 我使用文件句柄数组创建了文件: 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"; 但

我想根据索引选择要放入哪个文件的数据。然而,我似乎被以下几点困住了

我使用文件句柄数组创建了文件:

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

但是,由于某种原因,我在最后一行中得到了一个错误。帮助任何人?

首先尝试将
$file\u 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没有将其识别为输出句柄,而是抱怨语法无效。

您可以始终使用面向对象的语法:

$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");
或者像这样,如果这四个元素实际上是全部:

$file_h[$file]->print("@record_r1\n");
这应该是:

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

这是Perl语法的一个奇怪之处,因为文件句柄最初甚至不是变量,更不用说复杂的左值了?另外,你能设计一个完整的、独立的例子吗?(这将回答一些直接的问题,比如,你真的是指::File[sic]?你是指
index()
还是
$index
?)有趣的是
flock$File\h[$some\u index],LOCK\u EX
没有括号。有人知道为什么吗?perl中的文件句柄到底是什么?