Thread <$fh> (7 answers)
Opened by Froschpopo at 2006-10-04 05:24

sid burn
 2006-10-04 11:54
#70454 #70454
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Der normale Name "HANDLE" ist ein Typeglob, und der gilt Global für das Package.

Wenn du allerdings ein Skalar benutzt, dann gilt dieser, sofern du ihn mit my deklarierst, nur für den aktuellen Block/Datei.

Wenn du z.B. eine Datei öffnest und das Dateihandle dann "FH" nennst, dann ein oder zwei Zeilen ausliest und dann sagen wir mal eine eigene Subroutine aufrufst die auch wieder "FH" als Dateihandle benutzt.

Dann würde das open() in der Subroutine dein altes FH schließen, und diese wieder neu öffnen. Deswegen würden damit auch keine Rekursiven Funktionen gehen, da du mit jedem aufruf dein Dateihandle wieder schließt.

Wenn du aber stattdessen eine lexikalische Variable benutzt, dann gilt jede Variable nur für Ihren Block.

Letztendlich ist es weniger Fehleranfällig, und es erhöht auch deine Möglichkeiten.

(Obwohl man das ganze auch mit "local *FH" lösen könnte, ich meine da gab es aber trotzdem noch ein Unterschied. *nachdenk*)

Quote
ist das ne Referenz? und dass man ne subroutine mit sub my_read($$;) aufurfen kann hab ich auch noch nicht gesehn...

Die Subroutine wird nicht so aufgerufen, sie wird so definiert.
Das ist ein Prototyp. Daher diese Subroutine benötigt mindestens 2 Werte.

perlsub\n\n

<!--EDIT|sid burn|1159948569-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread <$fh>