2012-06-03 11 views
5

Ich wollte wählen, welche Daten in welche Datei je nach Index zu setzen. Ich halte mich jedoch an folgendes fest.Datei-Handle-Array

Ich habe die Dateien erstellt eine Reihe von Datei behandelt:

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

aber ich erhalte eine Fehlermeldung aus irgendeinem Grunde in der letzten Zeile. Hilf irgendjemandem ....?

+0

Dies ist eine Kuriosität der Perl-Syntax, da Dateihandles ursprünglich nicht einmal Variablen waren, geschweige denn kompliziertere Werte. –

+0

Was ist der Fehler? Könnten Sie auch ein vollständiges, in sich abgeschlossenes Beispiel finden? (Das würde einige unmittelbare Fragen beantworten, wie, meinst du wirklich IT :: File [sic]? Meinst du 'index()' oder '$ index'?) – pilcrow

Antwort

1

Versuchen Sie, die $file_h[$file] einer temporären Variablen erste Zuweisung:

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

Soweit ich mich erinnere, Perl es nicht erkennt als Ausgabe sonst behandeln, über ungültige Syntax beschweren.

4

Sie können immer die objektorientierte Syntax:

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

, können Sie mehr einfach aus dem Array drucken:

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

Oder so, wenn diese vier Elemente tatsächlich die sind ganze:

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

, die einfach sein sollte:

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 ... die Klammer dingy, danke –

+0

Interessanterweise' Herde $ file_h [$ some_index], LOCK_EX' funktioniert ohne Klammern. Weiß jemand warum? Was ist genau ein Dateihandle in Perl? – soger