2013-08-21 21 views
10

Możesz otwierać uchwyty plików w pamięci?Otwieranie plików w pamięci oznacza co?

Część w pamięci nie jest dla mnie jasna, co to znaczy?

Jeśli to oznacza, że ​​można korzystać z pamięci komputera, Czy to już nie działa w ten sposób?

+0

Gdzie to przeczytałeś? Jest to mylące, ponieważ uchwyt pliku jest * zawsze * strukturą w pamięci. Najprawdopodobniej odnosi się to do otwierania uchwytów plików bezpośrednio do zmiennych skalarnych Perla (które znajdują się w pamięci). – Borodin

+0

tak, twój komentarz jest poprawny, to właśnie miałem na myśli – airnet

+1

'perldoc -f open' odnosi się do nich jako" pliki w pamięci " – mob

Odpowiedz

16

Oznacza to, że można używać uchwytów plików do zapisu i odczytu ze zmiennych skalarnych.

my $var = ""; 
open my $fh, '>', \$var; 
print $fh "asdf"; 
close $fh; 
print $var;   # asdf 

Ostatecznie, to jest tylko jeden sposób na

$var .= "asdf" 

ale są konteksty gdzie jest wygodniejszy i bardziej odpowiednie do wykorzystania UCHWYTPLIKU paradygmatów niż paradygmatów łańcuchach.

Na przykład, zacząć z tym kodem:

open my $fh, '>', $logfile; 
... 
print $fh $some_message_to_be_logged; 
... 500 more print $fh statements ... 
close $fh; 

Ale wiesz co? Teraz wolałbym nagrać moje wiadomości dziennika w zmiennej skalarnej, może więc mogę przeglądać nimi manipulować nimi, zanim zostaną one zapisane na dysku, itd. Mogę zmienić wszystkie moje print sprawozdań do

$logvar .= $some_message_to_be_logged 

ale w w tym przypadku wygodniej jest po prostu zmienić instrukcję open.

open my $fh, '>', \$logvar 
0

Możesz otworzyć uchwyty plików bezpośrednio do zmiennych skalarnych. Jest to szczególnie przydatne, gdy masz coś, co musi zachowywać się jak plik, ale nie chcesz jednego na dysku. Przykład ten jest pobierany z perldoc:

close STDOUT; 
open(STDOUT, ">", \$variable) 
or die "Can't open STDOUT: $!"; 

Zamyka STDOUT a następnie ponownie otwiera on dołączony do $variable.