Thread open(my $var,... vs open(IN,... (13 answers)
Opened by Student87 at 2012-11-09 17:11

pq
 2012-11-09 17:48
#163196 #163196
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
z.b. in einer subroutine.
Code (perl): (dl )
1
2
3
4
5
6
sub foo {
    ...
    open my $fh, '<', $path or die $!;
    ...
    # hier am ende wird $fh automatisch geschlossen
}

es ist einfach sauberer, lexikalische filehandles zu benutzen, auch wegen der üblichen vorteile von my-variablen. es hat auch keine nachteile.
und das heisst nicht, dass man das close imer weglassen sollte. in den meisten fällen erübrigt sich das, aber ggfs. ist es doch nützlich, um anzuzeigen, dass der filehandle danach nicht mehr benutzt wird. (*)

edit: und als lesestoff: http://perl-tutorial.org/
da wird einem das von anfang an beigebracht.
vieles, was du im netz so findest, ist nicht unbedingt das aktuellste und beste. lieber mal ein aktuelles tutorial komplett durcharbeiten.

edit2: (*) das funktioniert so, weil die garbage collection von perl so arbeitet momentan. es wird erkannt, dass die variable nach abschluss der subroutine nicht mehr benutzt wird (es existiert dann keine referenz mehr darauf), und daher wird sie beim verlassen des blocks aufgeräumt.
würde man die garbage collection umstellen, so dass nicht mehr garantiert ist, wann genau die variable aufgeräumt wird, müsste man selber besser darauf achten.
Last edited: 2012-11-09 17:56:55 +0100 (CET)
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 open(my $var,... vs open(IN,...