Thread Variable als Dateihandle gibt Fehlermeldung:Can't use string ("HANDLE_1") as a symbol ref while "strict refs" in use at (3 answers)
Opened by trojax at 2009-06-29 08:06

pq
 2009-06-29 10:12
#122717 #122717
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zunächst einmal finde ich den code komisch, weil du die variable $datei_aktuell nicht mit my() deklarierst. ausserdem frage ich mich, warum du die aktuelle schleifenvariable nicht gleich in $datei_aktuell schreibst.
vgl.:
Code (perl): (dl )
1
2
3
4
5
6
foreach (@$dateien){
$datei_aktuell = $_;

# vs.

foreach my $datei_aktuell (@$dateien) {

auch die variable $Handle ist nicht mit my() deklariert. ich kann mir das nur so erklären, dass du diese variablen *vor* der schleife deklarierst, obwohl du sie ja nur *in* der schleife brauchst. das sollte man nicht machen, denn das macht ja wieder einen effekt von strict zunichte, dass man gewarnt wird, sobald man eine variable aus versehen ausserhalb des gültigkeitsbereich benutzt.
desweiteren nimmt open() als argument ein bareword oder eine variable, die dann zu einem filehandle wird. was jedoch nicht geht, ist, dass du einen string in eine variable schreibst und diese variable dann als filehandle benutzt. wo hast du das her?
ausserdem möchtest du alle handles in ein array schreiben und trotzdem sollen sie noch namen haben. wie soll das denn gehen?
wenn du filehandles in ein array schreiben willst, dann nimm lexikalische filehandles: Wiki:WasIsteinLexikalischerFileHandle

da dein codestück soviele unschönheiten und fehler beinhaltet, hier mal ein beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my @handles;
foreach my $filename (@$dateien) {
    open my $fh, '<', $filename or die $!;
    push @handles, $fh;
}

# später
my $handle = $handles[123];
print while <$handle>;

Last edited: 2009-06-29 10:14:03 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Variable als Dateihandle gibt Fehlermeldung:Can't use string ("HANDLE_1") as a symbol ref while "strict refs" in use at