Thread View: be.comp.programming
2 messages
2 total messages
Started by Robby De Smedt
Sat, 06 Sep 2003 23:13
variabele filehandles in perl
Author: Robby De Smedt
Date: Sat, 06 Sep 2003 23:13
Date: Sat, 06 Sep 2003 23:13
25 lines
1903 bytes
1903 bytes
Voor een perlscript moet ik 10 bestanden aanpassen die vogende
uitdrukkinkg hebben:
naam_1
naam_2
...
naam_9
Wegens de simpele naamgeving open ik deze met volgende uitdrukking:
for (my $i=0; $i<=9; $i++){
open (naam_.$i, ">>naam_$i") or die "can't open naam_$i ";
}
Als ik nu de bestanden begin te beschrijven met een print opdracht:
print naam_.$j "$variabele\n";
begint hij te klagen over de naam_.j uitdrukking. Indien ik dit echter
wijzig naar vb naam_3 dan lukt het wel. De filehandle is echter op net
dezelfde manier aangemaakt en over die uitfrukking wordt geen foutmelding
gegeven. Alleen in de printopdracht. Welk is nu echter de juiste manier om
die filehandle toch een variabel karakter te geven. Zodat ik ze niet
allemaal manueel moet ingeven.
alvast bedankt
Re: variabele filehandles in perl
Author: Gunter Schelfhout
Date: Sun, 07 Sep 2003 03:15
Date: Sun, 07 Sep 2003 03:15
49 lines
2378 bytes
2378 bytes
Robby De Smedt wrote:
> Voor een perlscript moet ik 10 bestanden aanpassen die vogende
> uitdrukkinkg hebben:
> naam_1
> naam_2
> ...
> naam_9
>
> Wegens de simpele naamgeving open ik deze met volgende uitdrukking:
>
> for (my $i=0; $i<=9; $i++){
> open (naam_.$i, ">>naam_$i") or die "can't open naam_$i ";
> }
>
> Als ik nu de bestanden begin te beschrijven met een print opdracht:
>
> print naam_.$j "$variabele\n";
'.' is de concat-operator. Ik vermoed dat Perl hier 'naam_' en $i beschouwd
als strings die hij moet printen, vanwege '.'.
Verder is het feit dat je de filehandle na de for-loop aanspreekt met
naam_.$i, terwijl $i IN de for-loop een lexical variable was. Maw, gaat uit
scope na het einde van de for-loop.
Probeer eens met:
my @filehandles = ();
my @files = ();
for (my $i=0; $i<=9; $i++) {
my $handle = FH{$i};
my $file = "naam_" . $i
push @filehandles, $handle;
push @files, $file;
open($handle, ">>$file") or die "Cannot open file $file: $!";
}
Daarna kan je filehandle als volgt gebruiken:
select($filehandles[3]);
print "String to print";
of voor alle handles tegelijk:
foreach my $handle (@filehandles) {
print $handle "String to print";
}
--
Blood, sweat & tears
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads