close
Uždaro failą ar pipe'ą, susietą su failo handl'u, gražinant true tik jei IO buferiai sėkminai išvalyti ir u-daro sistemos failo deskriptorių. Uždaro dabar pasirinktą filehandle'ą, jei argumentas praleistas.
Nereikia užadryti FILEHANDLE, jei iškart žadama daryti kitą open
ant to paties FILEHANDLE,
nes open
pats jį uždarys. (Žr. open
.) Vis dėlto,
aiškus close
įvedimo faile, iš naujo nustato eilučių skaitliuką($.
), tuo tarpu neišreikštas žodžiais uždarymas, atliktas open
- ne.
Jei failo handle'as atėjo iš piped open, close
papildomai gražins false, jei vienas kitų sisteminių kreipinių nepavyksta arba programa baigia darbą nenuliniu statusu (non-zero). (Jei problema buvo, kad problema baigė ne nuliu, $!
bus 0
.) Uždarant
pipe'ą taip pat laukiama kol baigsis procesas, esantis pipe, tuo atveju, jei būtų norima pažiūrėti pipe išvedimą po to. Ir netiesiogiai priskiria komandos exit statuso reikšmę į $?
.
Per anksti uždarius nuskaitantį pipe "galą" (t.y. prieš procesui rašant į jį, kitas galas uždaromas), rezultate SIGPIPE bus pristatytas rašančiajam. Jei kitas "galas" nesugeba su tuo susitvarkyti, reiktų nuskaityti visus duomenis prieš uždarant pipe'ą.
Pavyzdys:
open(OUTPUT, '|sort >foo') # pipe, kad išrūšiuotų
arba die "Can't start sort: $!";
#... # Išvesti
close OUTPUT # palaukiam kol pasibaigs rūšiavimas
arba warn $! ? "Error closing sort pipe: $!"
o>: "Exit status $? from sort";
open(INPUT, 'foo') # gauname rūšiavimo rezultatus
or die "Can't open 'foo' for input: $!";
FILEHANDLE gali būti išsireiškimas, kurio reikšmė gali būti panaudota kaip netiesioginis filehandle'as, dažniausiai tikruoju filehandle'o vardu.