2012-06-03 8 views
5

Quería elegir qué datos poner en cada archivo según el índice. Sin embargo, parezco estar atrapado con lo siguiente.Arreglo de arreglo de archivos

que han creado los archivos a través de una serie de identificadores de archivo:

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

Sin embargo, me da un error por alguna razón en la última línea. Ayuda a alguien ....?

+0

Esta es una rareza de la sintaxis de Perl, ya que las manetas de archivo no eran originalmente variables, mucho menos valores más complicados. –

+0

¿Cuál es el error? Además, ¿podría idear un ejemplo completo y autónomo? (Eso respondería algunas preguntas inmediatas como, ¿realmente quieres decir IT :: Archivo [sic]? ¿Quieres decir 'index()' o '$ index'?) – pilcrow

Respuesta

1

intente asignar la $file_h[$file] a una variable temporal en primer lugar:

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

Por lo que yo recuerdo, Perl no lo reconoce como una salida de manejar de otro modo, quejándose de sintaxis no válida.

4

Siempre puede utilizar la sintaxis orientada a objetos:

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

Además, se puede imprimir la matriz más simplemente:

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

O como este, si esos cuatro elementos son en realidad la cosa entera:

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

Eso simplemente debe ser:

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

ah ... la cosa del paréntesis, gracias –

+0

Curiosamente' bandada $ file_h [$ some_index], LOCK_EX' funciona sin corchetes. ¿Alguien sabe por qué? ¿Qué es exactamente un Filehandle en Perl? – soger